从原生 Kotlin Android 检索 Xamarin 安全存储数据

问题描述 投票:0回答:1

我有一个用 Xamarin 编写的应用程序,它使用 SecureStorage.SetAsync 保存数据。现在我需要将应用程序转换为原生 Kotlin 和 Swift 项目。 Xamarin 将数据存储在 iOS 钥匙串中,检索起来相对简单。但是我正在努力检索 Kotlin Android 中的数据,因为我相信我需要找到密钥并手动解密数据。

如何在 Android 中检索数据?

android kotlin xamarin.android android-storage
1个回答
0
投票

根据官方文档Platform Implementation Specifics of the SecureStorage API,它使用android native api Shared Preferences来存储数据。

Android KeyStore 用于存储用于加密值的密码密钥,然后将其保存到文件名为 [YOUR-APP-PACKAGE-ID].xamarinessentials 的共享首选项中。共享首选项文件中使用的密钥(不是加密密钥,值的密钥)是传递到 SecureStorage API 的密钥的 MD5 哈希。

所以我试过这个

SecureStorage.SetAsync("test", "hahaha");
。然后我搜索了共享首选项文件的android默认位置,它在
/data/data/YOUR_PACKAGE_NAME/shared_prefs/YOUR_PACKAGE_NAME.xamarinessentials.xml
.

我用 Android Studio 的设备文件资源管理器检查了文件:

值已经加密,可以查看加密字符串的源码。此外,您可以查看源代码了解它是如何使用共享首选项的

var sharedPreferences = GetSharedPreferences(sharedName)
。 sharedName 是 SecureStorage 类中的
string Alias = $"{AppInfo.PackageName}.xamarinessentials"
.

所以我使用android原生api读取共享首选项文件:

var name = this.PackageName + ".xamarinessentials";
var sp = GetSharedPreferences(name, FileCreationMode.Private);
var value = sp.GetString("test",null);

调试结果:

该值是加密的,需要根据加密字符串的源码进行解密。因此,您只需将三行 c# 代码转换为 kotlin 代码即可获取值。

另外,如果你想将xamarin app转为Android Kotlin app,可以直接使用native SharedPreferences api。我不明白为什么你需要 Retrieve Xamarin secure storage data from native Kotlin Android.

© www.soinside.com 2019 - 2024. All rights reserved.