【问题标题】:AES 256 Encryption implementation in androidAndroid中的AES 256加密实现
【发布时间】:2012-02-06 18:47:15
【问题描述】:

我知道这个问题在 StackOverflow 中非常受欢迎,以至于 AES 256 如何在 Android 中实现,但主要问题是没有任何解决方案给出 AES 256 的确切加密和解密。所有代码都通过 128 和 256 的密钥长度解释不正确。

KeyGenerator kgen = KeyGenerator.getInstance("AES");
        SecureRandom sr = SecureRandom.getInstance("SHA1PRNG");
        sr.setSeed(seed);
        kgen.init(256, sr); // 192 and 256 bits may not be available
        SecretKey skey = kgen.generateKey();
        byte[] raw = skey.getEncoded();
        return raw;

但我需要与此不同,其中 AES 256 实现不作为 256 密钥长度。请就相同问题向我提出正确的解决方案。

提前致谢。

【问题讨论】:

  • 我不确定我是否理解您的问题。您的问题是:“如果我的密钥材料不是 128 位或 256 位,我该如何制作 AES-128 或 AES-256 密钥?”
  • 是的,大卫.......这是个问题。
  • 你的密钥材料有多少熵?为什么要使用 AES256 而不是 AES128?

标签: android encryption


【解决方案1】:

如果您拥有的密钥材料是密码,您应该使用PBKDF2。如果不是,那么只需获取密钥材料的 SHA-256 哈希值(即 256 位)就足够了。对于 128 位密钥,只需使用一半的哈希值。

请注意,使用小于 100 位的密钥材料是非常不可取的。

【讨论】:

    【解决方案2】:

    AES256 总是使用 256 位密钥。如果您的密钥材料具有不同的长度,您可以使用哈希函数(例如 SHA-256)的输出来获取 256 位密钥。

    但如果您的密钥材料的熵小于 256 位,那显然意味着您不会获得 256 位的安全性。一旦安全性大大低于 128 位,实际安全性就会受到影响。

    如果您的密钥材料是密码,请使用密钥派生函数(例如 PBKDF2)来获取密钥。它故意变慢,以提高熵相对较低的密码的安全性。

    【讨论】:

      猜你喜欢
      • 2018-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-09
      • 1970-01-01
      • 1970-01-01
      • 2018-10-26
      • 2012-10-01
      相关资源
      最近更新 更多