【问题标题】:SQLCipher and passphrase for encryption用于加密的 SQLCipher 和密码
【发布时间】:2014-11-18 09:31:24
【问题描述】:

我最近更改了我的应用程序以使用 SQLCipher API 而不是标准的 android.database.sqlite。

最初,用户在第一次登录应用程序时会输入他们的用户名和密码。该应用程序根据我们的服务器验证凭据。如果它们是正确的,我将用户名和密码存储在手机上的 sqllite Db 中。随后对手机的数据库进行登录,无需网络呼叫。

我也混淆了 apk。

存储的密码还用于获取用户的名单,其中包含敏感的客户端数据。例如,用于进入客户住所、地址等的数字代码。这是需要保护的,以防手机被盗、root 或反编译。

我的问题是我知道每次调用 SQLCipher 加密/解密都会自动发生

SQLiteDatabase db = dbhelper.getWritableDatabase("12345");

12345 只是我现在硬编码的一些字符串。我希望这是用户用于登录的密码。

最好的方法是什么。我需要找到一种安全存储用户密码并用于加密的方法。我不想在应用程序中硬编码任何密码(除非这是唯一的方法)。

问题是我怎么打电话

SQLiteDatabase db = dbhelper.getWritableDatabase("STORED PASSOWRD IN DB");
return db.query(DBHelper.TABLECARER, null, null, null, null, null, null);

光标什么时候有密码?

谢谢

【问题讨论】:

  • 你是如何混淆 apk 的?
  • @NadeemIqbal 我正在使用 Proguard

标签: android sqlcipher


【解决方案1】:

请参考此链接: http://www.informit.com/articles/article.aspx?p=2268753&seqNum=4

请记住,您不应将密钥与受保护的数据一起存储在设备上

【讨论】:

  • 请注意 link-only answers 是不鼓励的,所以答案应该是寻找解决方案的终点(与另一个中途停留的参考相比,随着时间的推移往往会变得陈旧)。请考虑在此处添加独立的概要,保留链接作为参考
  • 我在这里尝试了一个概要:stackoverflow.com/a/70883829.
【解决方案2】:

来自"Practical Advice for Building Secure Android Databases in SQLite"

在安全性和用户便利性之间进行权衡。

  • 每次都向用户询问密钥。最安全,最不方便。
  • 保存在设备上的首选项文件中。可以被黑客入侵。
  • 保存在设备上的代码中。可以进行逆向工程。
  • 调用网络以获取解密密钥。需要互联网连接。

总体而言,如果密钥在设备上的任何地方,只要有黑客动机就可以将其挖出,但如果没有,则需要互联网连接或不方便的东西。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-16
    • 1970-01-01
    • 2013-01-13
    • 2021-06-21
    • 1970-01-01
    相关资源
    最近更新 更多