我已经在我的Android应用程序中实现了SQLCipher
,以确保其数据库安全。 SQLCipher
需要一个密钥来加密数据库文件。我面临的问题是密钥保护,如果我的应用程序在root设备上使用或者是逆向工程,那么我的密钥将被公开并且数据库可以被解密。
请注意,我的应用程序每次打开时都不会要求输入密码,因此用户输入的密码不能用作密钥。我想实现像facebook,whatsapp应用程序这样的行为,它使用私钥/密钥加密数据而不需要任何密码并让用户始终保持登录状态。这些应用程序在何处以及如何存储其密钥?
请建议一个能够保护密钥的解决方案/算法。此外,Android操作系统是否为数据保护/管理提供了任何此类功能?
答案 0 :(得分:6)
您可以使用Andriod Keystore加密您的SQLCipher密码。
前一段时间我遇到了同样的问题,其中SQLCipher用于保护数据,但密码本身并非如此。这允许一个安全漏洞,其中一个简单的反编译将显示密码,因为它是字符串常量的形式。
我的解决方案是:
这是我制作的一个示例项目,它还有一个与您相同的SQLCipher用例。
Encryption Helper for Encrypting Passwords
请注意,在上面的讨论中,您用作加密密钥的术语将用作DB的密码/编号。
答案 1 :(得分:-1)
就个人而言,我使用子字符串从字符串值中选择序列或唯一字符,然后我连接它以获取我的密钥,它非常野蛮但我没有找到其他有效的解决方案。