如何存储用于android的SQLCipher中使用的密钥

我正在使用SQLCipher for Android。 我已经完成了所有必要的事情,如http://sqlcipher.net/sqlcipher-for-android/

我观察到,你设置密码,即密钥在:

SQLiteDatabase database = SQLiteDatabase.openOrCreateDatabase(databaseFile, "test123", null); 

那么你的密码如何从黑客安全? 因为它可以从一个Java文件访问。 ?

有没有什么正确的方法可以存储密码?

谢谢,尼布斯

Solutions Collecting From Web of "如何存储用于android的SQLCipher中使用的密钥"

那么你的密码如何从黑客安全?

不是。 但是,对密码进行硬编码使得简单的演示成为可能。

有没有什么正确的方法可以存储密码?

用户应该通过你的UI提供用户数据库的口令。 然后用户将密码存储在用户的头部,或者可以将用户头部中的内容与用于轻量级双因素authentication的其他内容(例如,配对的蓝牙可穿戴设备的MAC地址)结合起来。

我想build议以下方法:

  • 您第一次创build数据库时,您必须创build一个随机密码。
  • 您将此密码存储在密钥库中。
  • 无论何时打开应用程序,您都可以从密钥库中读取密码,并将其用于连接到数据库。

那么密钥库访问如何工作? 请参阅博客条目1和博客条目2以及相应的github存储库 。 该解决scheme适用于Android版本2.1至4.3。

注意事项:

  1. 该解决scheme仅适用于私人API访问,所以未来可能会中断。
  2. 存储密钥需要屏幕locking密码,如果用户删除了锁屏密码,所有密钥都将被擦除。

被忽视的是SQLCipher的演示纯粹是为了演示。 克服显而易见的是开发商的想象力。 稍微不太明显的是,你不会把密钥存储在私有局部variables中,因为对你的类文件执行stringsearch可以揭示你的密钥,从而减less成功的暴力攻击所需的字典。 在一个hex编辑器中打开你的classes.dex并尝试。

这不是你应该关心的.java文件,因为只有你的开发者应该在那里。 这是.class文件。 下一步的努力是混淆的一些努力,但这真的只是限制了不耐烦。

看看这个讨论https://groups.google.com/forum/#!topic/sqlcipher/OkE0rUwXEb8