【问题标题】:Encryption android file加密安卓文件
【发布时间】:2014-09-17 17:27:38
【问题描述】:

我想将数据存储在 android 应用上的 sqlite 数据库中。

如果有人找到了手机,他很容易检索到这个数据库并进行探索,所以我想对其进行加密。

我发现https://guardianproject.info/code/sqlcipher/ 是最好的选择,但要对其进行加密,我们需要一个密钥 (SQLiteOpenHelper.getWritableDatabase(“thisismysecret”)

密钥存储在android应用程序的代码中,它仍然不安全吗? (我觉得对一个apk进行逆向工程并不难)

所以我想请用户输入一个用于加密数据的密码。 我也不必打扰用户在每次操作时询问他的密码,所以我在每次启动应用程序时都询问他密码。这意味着我必须将它存储在一个变量中。

所以我的问题是:有没有办法让可能偷手机的黑客查看“实时数据”,例如正在运行的 android 应用程序中存储的变量。我的意思是他可以转储 android 应用程序的实时状态并实时解析对象(例如 Eclipse 逐步调试器)

【问题讨论】:

  • it will be super easy for him to retrieve this database and explore it。可能,是的。超级简单,我不会走那么远。你需要root设备才能开始。
  • 我同意,不是很容易,但你可能是对的

标签: java android sqlite encryption cryptography


【解决方案1】:

您应该散列 (MD5) 密码,存储散列版本,并使用散列密钥调用数据库。然后在输入密码时,应将哈希版本与存储的值进行比较。

MessageDigest digest = MessageDigest.getInstance("MD5");
digest.update(inputPassword.getBytes());
byte[] hashedPassword = digest.digest();

【讨论】:

  • 其实我并不关心用户输入的密码是对还是错,如果输入了错误的密码,解密将无法进行,我可以接受
  • MD5 不得用作密码散列或密钥派生函数。坏了。
  • 最好使用 SHA-1 或 SHA-256。 MD5 彻底坏了
  • 谢谢,但我的问题不是关于如何存储密码
猜你喜欢
  • 2011-03-10
  • 1970-01-01
  • 1970-01-01
  • 2011-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多