【问题标题】:Android: Define which encryption to use: AES 128 or AES 256Android:定义要使用的加密:AES 128 或 AES 256
【发布时间】:2012-07-18 14:05:53
【问题描述】:

在我正在使用的 android 项目中

import javax.crypto.Cipher;

ecipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); 

请问:使用AES128还是AES256,是由使用的key定义的吗?例如key="012345678901234567890123456789012"; 会因此使用 AES256?

谢谢
托马斯

【问题讨论】:

  • Cipher.getInstance("AES/CBC/PKCS5Padding"); 所做的只是创建密码。如果您给它一个 128 位密钥,它将使用 AES128,如果您给它一个 256 位密钥,它将使用 256。您的示例密钥是伪造的。有关示例,请参见 this post

标签: java android encryption aes


【解决方案1】:

是的,是使用 AES128 还是 AES256 由正在使用的密钥定义。

但是,决定它的不是String 长度而是byte[] 长度。在您的代码中的某个时刻,您应该将String 转换为byte[]。结果 byte[] 的大小是您的密钥大小。在不知道如何转换"012345678901234567890123456789012" 的情况下,不可能知道您的加密强度。

您也可以使用KeyGenerator:

    KeyGenerator keyGen = KeyGenerator.getInstance("AES");
    keyGen.init(128); // or 256

    // Generate the secret key specs
    SecretKey secretKey = keyGen.generateKey();
    byte[] byteArray = secretKey.getEncoded();

【讨论】:

  • 您当然是完全正确的,但是 32 个字符不太可能导致少于 32 个字节,这意味着 AES-256 或失败。 Java 确实 - 据我所知 - 不会像其他一些 idiotic 框架那样切断或附加关键字节。
猜你喜欢
  • 2013-08-12
  • 2013-08-11
  • 2015-04-10
  • 1970-01-01
  • 1970-01-01
  • 2011-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多