【问题标题】:Confused about how Android Encryption works对 Android 加密的工作原理感到困惑
【发布时间】:2011-08-25 17:58:35
【问题描述】:

好的,我正在开发一个应用程序,我想在用户的 SD 卡上存储一个文件,但我希望文件加密。我研究了几个使用 DES 加密来加密文件和数据的站点,但我对某些事情感到困惑。我看到的所有示例都使用这样的一行:

SecretKey key = KeyGenerator.getInstance("DES").generateKey();

我遇到的问题是我得到了要加密的密钥,显然我需要相同的密钥来解密。但这似乎是一个悖论,因为如果我将密钥存储在文件或数据库中,就不能有人得到密钥并解密我的文件吗?也许我遗漏了一些东西,但是有没有办法使用提供的密码生成密钥?如果必须将生成的密钥存储在其他地方,为什么有人不想使用密码呢?

【问题讨论】:

  • 另请注意,如果使用 AES 128 或 256 位密钥加密将应用发布到 Android 电子市场,您必须证明您遵守当地法律。

标签: java android encryption cryptography des


【解决方案1】:

首先,请不要使用 DES。它已经被打破了很多年。请改用AES

我遇到的问题是我得到 我的加密密钥,显然我需要 相同的密钥来解密。

如果您使用对称加密技术,就是这样。否则看看asimmetric encryption

但这似乎是一个悖论,因为 如果我将密钥存储在文件或 数据库,不能有人得到密钥 并解密我的文件?

是的,有人可以做到。

Maybe I am missing something, but is there a way to generate a key using a supplied pass phrase?

您不会使用密码短语来使用密钥。通常你会做以下事情:

  1. 密钥生成
  2. 使用从密码短语派生的对称密钥对生成的密钥进行加密

为什么有人不想使用 一个密钥,如果他们必须存储 在其他地方生成密钥?

可能有几个原因。例如,您可以将密钥存储在可移动设备中,并且只需将其连接到计算机即可检索密钥,而无需输入密码。 有密码也有它的缺点:密码必须记住,可以猜到,如果太长可能你会写下来(这和存储在文件中的东西差不多)

编辑:

要从密码生成密钥,请查看PBKDF2 (related post)。

【讨论】:

    【解决方案2】:

    我认为有两种情况:

    1. 您信任用户 - 让密钥依赖于某些输入(密码/密码短语)。并用它加密/解密数据。

    2. 你不信任用户——那你就有麻烦了,你可能会混淆加密/解密算法,但只要将机制+密钥存储在设备上,你就会有这个问题。

    这适用于对称和非对称加密。

    【讨论】:

    • 我信任用户,我希望密钥依赖于密码,但我该怎么做呢? generateKey() 方法似乎不允许提供密码。
    • 一旦你生成了一个密钥(使用你指定的方法)用你从用户那里得到的密码加密它并将它保存在数据库中(或任何你想要的地方)我将在 2-3 中详细说明小时。
    • 是的,我明白了。我不清楚的部分是如何“使用从用户那里获得的密码对其进行加密”。这是如何在 Android 中完成的?
    • 看这里的例子:exampledepot.com/egs/javax.crypto/PassKey.html。请注意,此示例是针对 DES 的,不推荐使用,但应该可以让您体验一下,请参阅此处:download.oracle.com/javase/6/docs/technotes/guides/security/… 了解更多信息,此处:coderanch.com/t/417428/java/java/Enryption-Java
    【解决方案3】:

    是的,可以使用密码进行加密。

    但首先,转储 DES。使用 AES-128。

    接受用户的密码并使用 SHA-256 或 SHA-512 生成哈希。将 AES-128 的散列修剪为 128 位。参考这篇文章。

    Java AES and using my own Key

    尽可能使用盐。

    关于密码部分的存储。存储哈希而不是密码。这样可以防止攻击者生成密钥。要求用户输入强密码。别忘了你的盐也必须很浓。

    因此,最后,您只存储密码的哈希值。不存储密码和解密密钥(运行时生成)

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 2021-06-24
      • 2018-09-17
      • 1970-01-01
      • 2015-01-13
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      • 2011-10-13
      • 2018-11-13
      相关资源
      最近更新 更多