我的Android应用程序需要将帐户,密码和其他重要信息存储在其数据库中。因此,出于安全考虑,我正在研究对这些数据进行加密以保存在数据库中,并在需要时再次对其进行解密。
使用盐和迭代可以使加密数据更强。这部分我知道如何去做。但是我的担心是,有很多讨论都没有建议对硬编码的AES密钥或PBE密钥进行讨论。但是没有密钥,我无法再次解密数据(我确实需要再次解密)。
Android应用程序是否有保存密钥的好建议?
非常感谢。
将数据保存到.so文件中。您需要在项目中实现ndk集成。这将使破解变得更加困难。这样您就可以从c ++文件中获取价值。还请检查c ++中的软件包名称,以确保您的so文件未在任何其他应用程序中使用。
建议使用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支持的密钥库23级及以上。我们可以直接使用生成随机AES密钥generateKey API,由Android自动管理密钥库。