Android:如果没有硬编码加密密钥,在哪里保存加密密钥

时间:2015-11-23 09:42:29

标签: android encryption-symmetric

我的android应用程序需要将account,passwd和其他重要信息存储在其数据库中。所以关注安全性,我现在正在研究加密这些数据以保存在数据库中并在需要时再次解密。

使用salt和迭代可以使加密数据更强大。这部分我理解如何做到这一点。但我担心的是,有很多讨论不建议使用硬编码的AES密钥或PBE密钥。但没有密钥,我无法再次解密数据(我需要再次解密)。

Android应用程序保存密钥有什么好建议吗?

非常感谢。

1 个答案:

答案 0 :(得分:1)

建议使用Android密钥库管理加密密钥,这是设备端管理加密密钥的最安全选项。从用户应用程序可用之日起,Android Keystore进行了许多更改,这就是为什么我根据API级别对推荐的方法进行了归类的原因:

  • API级别<18::Android不支持API级别17的密钥库 及以下。对于API级别17及以下版本,建议 应用程序使用PBKDF2(基于密码的密钥派生功能) 安全,以便应用程序在登录时(使用用户密码)在运行时生成加密密钥。加密密钥不应存储在设备中,并且应在需要时使用用户密码动态生成,因为设备中没有安全的位置来管理密钥。

    API级别> = 18 <23 :Android支持API级别18及以上的密钥库。但是,对于API级别22和更低级别的AES支持 加密不可用。建议申请 使用默认密码提供程序生成随机AES密钥 并使用Android生成的RSA公钥对AES密钥进行加密 通过keyPairGenerator生成密钥库。加密密钥加密后,可以将其存储在应用程序的私有数据存储中(例如:SharedPreferences)。当应用程序启动时, 可以使用RSA私钥解密AES密钥。

    API级别> = 23::Android支持具有API的AES支持的Keystore 23级及以上。我们可以直接使用生成随机AES密钥 generateKey API,并且由Android自动管理 密钥库。