问题标签 [encrypted-shared-preference]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - 使用 EncryptedSharedPreferences 获取 KeyStoreException 和 GeneralSecurityException,我该如何解决?
背景
在我使用的一个应用程序中,我将重要的东西(令牌)存储到 EncryptedSharedPreferences 中(取自此处和此处):
毕业典礼:
问题
我注意到使用此代码时通过 Crashlytics 报告了 2 个错误(在此处报告):
- 第一个是
MasterKey.Builder
:GeneralSecurityException
- 第二个是
EncryptedSharedPreferences.create
在线的KeyStoreException
,并且发生的频率更高,用户也更多:
编辑:似乎还有更多类型的例外:
- 无效协议缓冲区异常:
- 空指针异常:
我试过的
在 Internet 上搜索,我只发现了第一个异常 (GeneralSecurityException) 的线索,这可能是自定义 ROM 发生的,因为它们可能无法很好地实现用于加密的硬件密钥。
事实上,查看 Crashlytics 上的设备,查看每个设备的 Android 版本,我发现它们领先于我所看到的支持它们的最新版本。
对于第二个例外,可悲的是,我找不到任何解释,也没有解决方案。我认为这可能与应用程序的恢复有关,但这很奇怪,因为它经常发生。在 reddit(此处)上,有人写道,如果出现这种异常,他选择了wrap the initialization of EncryptedSharedPreferences with "clear all data if fails" and bite the bullet
. 还建议它可能与android:allowBackup
被禁用有关(确实如此)。
不知道其余的。
问题
为什么会出现这些异常?我能对他们做什么?
清除数据是唯一可以做的事情吗?我什至不确定它是否真的有帮助,因为如果我选择拥有它,这意味着每次它即将发生时崩溃报告都会消失......
和android:allowBackup
残疾有关系吗?
android - android正确使用jwt身份验证
我目前正在构建一个使用 JWT 身份验证的应用程序。我已经rest-api
使用nodejs,mongodb.
现在访问令牌没有过期时间(我知道它不安全,但无论如何)。您认为在手机中存储访问令牌的最佳选择是什么?有几种意见,例如AccountManager
和SharedPreferences
(我目前正在使用的一种)。但众所周知,它们并不安全。
使用EncryptedSharedPreferences
方法是否正确?或者你有什么建议吗?
android - EncryptedSharedPreferences 显示错误。在 android 中安全保存(简单)值的最佳方法是什么?
我使用 Nox player 作为模拟器,工作环境是 Android Studio。当前项目的min-SDK版本为23,compileSDK版本为29。
java.lang.NoClassDefFoundError:解析失败:Landroid/security/keystore/KeyGenParameterSpec$Builder;
此错误发生在这部分代码中。
我还添加了这些依赖项。
我尝试更改android:allowbackup="false"
,也尝试将 min-SDK 版本更改为 24 或更高版本,但同样的问题总是发生。
如果有人有想法,请帮助我。谢谢。(PS 如果您有任何建议在 android 应用程序中保留简单值)
encryption - Android Keystore 和“设置”应用程序的“清除数据”操作是否相关?
我正在开发一个系统应用程序,我将一些敏感数据存储在 EncryptedSharedPreference 中。如果我清除 android Settings 应用程序的数据,我意识到我的应用程序无法按预期工作。发生这种情况是因为如果我尝试获取 EncryptedSharedPreferences 的实例,它会抛出 IOException。当我观察 encrypted_myapp_pref.xml 文件时,我可以看到该文件中存在所有加密值,并且该文件根本没有更改。
我读到 Jetpack Security 有两种类型的密钥 - 主密钥和子密钥:
MasterKey - 加密和解密所有子密钥,主密钥存储在 Android 密钥库中。 子密钥 - 所有用户数据和所有数据 + 子密钥的加密和解密都以加密格式存储在 EncryptedSharedPreferences 本身中。
我的理论是:当我们对设置应用程序进行“清除数据”时,它也会清除 Android Keystore 实例。所有使用sharedUserId="android.uid.system" + EncryptedSharedPreferences
. 但我没有找到任何支持我的理论的文件。
问题陈述:如果我们使用具有共享用户 ID 的系统应用程序并且如果我们清除设置应用程序的数据,在终止我们的应用程序并重新启动或设备重新启动时,我们的应用程序(任何系统应用程序)无法检索 EncryptedSharedPreferences 实例并失败带有 IOException。
android - 在加密共享首选项中保存用户凭据是否安全?
尝试保存用户凭据的是加密共享首选项。这种方法安全吗?
android - 加密共享首选项导致 Android 9 和 Android 10 上的 ANR
我正在使用加密共享首选项来加密首选项数据。我通过以下方式使用它:
我从我的应用程序类访问这个安全共享的首选项实例。这在我的生产应用程序中导致了 ANR 问题。
此行为观察器主要在 Android 9 和 10 上。
cipher.init周围报告了 Andorid 错误。有什么办法可以解决这个问题。它导致我的应用程序在 Playstore 上出现不良行为。
android - security-crypto:针对 S+(版本 31 及更高版本)要求在创建 PendingIntent 时指定 FLAG_IMMUTABLE 或 FLAG_MUTABLE 之一
定位 S+(版本 31 及更高版本)要求在创建 PendingIntent 时指定 FLAG_IMMUTABLE 或 FLAG_MUTABLE 之一。强烈考虑使用 FLAG_IMMUTABLE,仅当某些功能依赖于 PendingIntent 是可变的时才使用 FLAG_MUTABLE,例如,如果它需要与内联回复或气泡一起使用。
堆栈跟踪:
com.google.crypto.tink.shaded.protobuf.FieldType$Collection。(FieldType.java:337) androidx.security.crypto.EncryptedSharedPreferences$PrefKeyEncryptionScheme。(EncryptedSharedPreferences.java:148) PreferenceHelper$Companion.init (PreferenceHelper.kt:41)
这就是我初始化 SharedPreferences 的方式:
请问有什么帮助吗?