gpt4 book ai didi

AndroidX Security EncryptedSharedPreferences v1.1.0/w API 21 问题

转载 作者:行者123 更新时间:2023-12-02 12:06:57 25 4
gpt4 key购买 nike

我决定使用 AndroidX 安全库中的新 EncryptedSharedPreferences。由于该应用程序支持 API 21 及更高版本,我决定尝试这个新的 v1.1.0-alpha02 版本,因为它支持 API 21+
所以,我成功地实现了 API 23+,但是对于不支持 Android KeyStore 的旧版本,我无法做到正确,并且没有确切的说明应该如何创建主 key 以使其以某种方式工作.
初始化 SharedPrefs 的代码:

EncryptedSharedPreferences.create(
"prefs_name",
createMasterKey(),
App.appContext,
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
)
使用此功能创建主 key
   private fun createMasterKey(): String {
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
MasterKeys.getOrCreate(MasterKeys.AES256_GCM_SPEC)
} else {
val alias = "my_alias"
val start: Calendar = GregorianCalendar()
val end: Calendar = GregorianCalendar()
end.add(Calendar.YEAR, 30)

val spec = KeyPairGeneratorSpec.Builder(App.appContext)
.setAlias(alias)
.setSubject(X500Principal("CN=$alias"))
.setSerialNumber(BigInteger.valueOf(abs(alias.hashCode()).toLong()))
.setStartDate(start.time).setEndDate(end.time)
.build()

val kpGenerator: KeyPairGenerator = KeyPairGenerator.getInstance(
"RSA",
"AndroidKeyStore"
)
kpGenerator.initialize(spec)
val kp: KeyPair = kpGenerator.generateKeyPair()

kp.public.toString()
}
}
我在某个地方找到了这个解决方案,但它没有经过验证(没有确认它确实有效),但它似乎应该有效。
将此代码块用于 API 21 和 22 时,创建 EncryptedSharedPreferences 时出现错误,并显示:
方法引发了“com.google.crypto.tink.shaded.protobuf.InvalidProtocolBufferException”异常。
协议(protocol)消息包含无效标签(零)。
有人找到了这个实现的解决方案吗,或者你知道为什么会这样吗?
我认为这会对很多人有所帮助,因为没有确切的解释这个主 key 应该包含什么。
提前致谢!

最佳答案

添加到 list android:allowBackup="false" android:fullBackupContent="false"因为在卸载应用程序后,您仍然备份了加密文件,安装新版本后您肯定无法解密。

关于AndroidX Security EncryptedSharedPreferences v1.1.0/w API 21 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63597398/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com