如何在Android上保护数据库(加密)密码?

Saq*_*qib 2 database security android password-protection

我有一个包含私人信息的数据库,只能由我的应用程序访问.我在assets文件夹中添加了我的数据库文件,该文件夹在应用程序第一次运行时被复制到应用程序数据库目录,但是"assets"目录和"data"目录(在root设备上)可以被任何其他应用程序访问所以我决定加密数据库.Android默认的SQLite数据库不提供数据加密,所以我决定使用SQLCipher for android http://sqlcipher.net/sqlcipher-for-android/.

现在我已成功加密数据库,我可以使用特定密码访问它.但问题仍然存在......我应该在哪里存储这个密码?这样它只能被我的应用程序访问.

  1. 无法对其进行硬编码,因为即使对其进行了混淆,也可以在对其进行反编译后对其进行访问.
  2. 无法将其存储在文件系统中(资产/原始)
  3. 不能要求用户输入它,因为用户可能是黑客

它是独立的应用程序,根本没有服务器交互

mah*_*mah 5

Can't ask the user to enter it as the user could be a hacker然后你无法安全地存储它.由于您已经确定的相同原因,特别是您的代码可以被反编译,您存储的任何可访问的地方都可以通过反编译找出,因此可以通过任何具有正确访问权限的代码进行检索.

用户提供的东西存储在用户存储的任何地方 - 可能是在他或她的头脑中.这不是软件可以访问的,这使其成为降低恶意软件攻击风险的理想选择.如果输入的密码有效,您无法知道用户是否被授权,但是您可以定义策略,例如最小密钥长度,最大入口尝试次数(在引入一些延迟或其他锁定之前)等等.