Android : 如果不是硬编码加密密钥,加密密钥保存在哪里
Android : If not hard-coded encryption key, where to save the encryption key
我的android 应用程序有帐户、密码和其他重要信息需要存储在其数据库中。所以担心安全问题,我现在正在研究加密这些数据以保存在数据库中并在需要时再次解密。
使用加盐和迭代可以使加密后的数据更加牢固。这部分我明白怎么做。但我担心的是,有很多讨论不建议硬编码 AES 密钥或 PBE 密钥。但是没有密钥,我无法再次解密数据(我确实需要再次解密)。
android应用保存密钥有什么好的建议吗?
非常感谢。
将您的数据保存在 .so 文件中。你需要在你的项目中实现 ndk 集成。这将使破解变得更加困难。你可以从 C++ 文件中取回你的值。还要检查 c++ 中的包名称,以确保您的 so 文件未在任何其他应用程序中使用。
建议使用AndroidKeystore管理加密密钥,这是设备端管理加密密钥最安全的选择。 Android Keystore 从可供用户应用程序使用之日起经历了很多变化,这就是为什么我根据 API 级别对推荐方法进行分类的原因:
API 级别 < 18: Android 不支持 API 级别 17 的密钥库
及以下。 API 17级及以下,建议
应用程序使用 PBKDF2(基于密码的密钥派生函数)
安全地使得应用程序应该在登录时(使用用户密码)在运行时生成加密密钥。加密密钥不应存储在设备中,并且应在需要时使用用户密码动态生成,因为设备中没有安全的地方来管理密钥。
API 级别 >=18 <23:Android 支持 API 级别 18 及以上的密钥库。但是,对于 API 级别 22 及以下支持 AES
加密不可用。建议申请
使用默认加密提供程序生成随机 AES 密钥
并使用 Android 生成的 RSA public 密钥加密 AES 密钥
通过 keyPairGenerator 的密钥库。一旦加密密钥被加密,它就可以存储在应用程序的私有数据存储中(例如:SharedPreferences)。当应用程序启动时,
可以使用 RSA 私钥解密 AES 密钥。
API 级别 >=23: Android 支持密钥库,支持 AES API
23级及以上。我们可以使用直接生成随机 AES 密钥
generateKey API 由 Android 自动管理
密钥库。
我的android 应用程序有帐户、密码和其他重要信息需要存储在其数据库中。所以担心安全问题,我现在正在研究加密这些数据以保存在数据库中并在需要时再次解密。
使用加盐和迭代可以使加密后的数据更加牢固。这部分我明白怎么做。但我担心的是,有很多讨论不建议硬编码 AES 密钥或 PBE 密钥。但是没有密钥,我无法再次解密数据(我确实需要再次解密)。
android应用保存密钥有什么好的建议吗?
非常感谢。
将您的数据保存在 .so 文件中。你需要在你的项目中实现 ndk 集成。这将使破解变得更加困难。你可以从 C++ 文件中取回你的值。还要检查 c++ 中的包名称,以确保您的 so 文件未在任何其他应用程序中使用。
建议使用AndroidKeystore管理加密密钥,这是设备端管理加密密钥最安全的选择。 Android Keystore 从可供用户应用程序使用之日起经历了很多变化,这就是为什么我根据 API 级别对推荐方法进行分类的原因:
API 级别 < 18: Android 不支持 API 级别 17 的密钥库 及以下。 API 17级及以下,建议 应用程序使用 PBKDF2(基于密码的密钥派生函数) 安全地使得应用程序应该在登录时(使用用户密码)在运行时生成加密密钥。加密密钥不应存储在设备中,并且应在需要时使用用户密码动态生成,因为设备中没有安全的地方来管理密钥。
API 级别 >=18 <23:Android 支持 API 级别 18 及以上的密钥库。但是,对于 API 级别 22 及以下支持 AES 加密不可用。建议申请 使用默认加密提供程序生成随机 AES 密钥 并使用 Android 生成的 RSA public 密钥加密 AES 密钥 通过 keyPairGenerator 的密钥库。一旦加密密钥被加密,它就可以存储在应用程序的私有数据存储中(例如:SharedPreferences)。当应用程序启动时, 可以使用 RSA 私钥解密 AES 密钥。
API 级别 >=23: Android 支持密钥库,支持 AES API 23级及以上。我们可以使用直接生成随机 AES 密钥 generateKey API 由 Android 自动管理 密钥库。