Android AES crypt 192bit密钥

时间:2012-10-09 10:29:08

标签: android aes

我想使用192位密钥加密数据。

SecretKeySpec key = new SecretKeySpec(new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, "AES/CBC/NoPadding");
byte[] data = new byte[] {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
byte[] encrypted = null;
try {
    Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
    cipher.init(Cipher.ENCRYPT_MODE, key);
    encrypted = cipher.doFinal(data);
} catch (Exception e) {
    System.out.println(e.getMessage());
}

但加密并非如此。而且每次阵列的内容都不同。为什么呢?

1 个答案:

答案 0 :(得分:1)

您正在使用CBC模式,这需要初始化向量(IV)。由于您没有明确设置,因此每次加密时都会生成一个随机的。你必须要么:

  • 使用静态IV(不推荐)或
  • 将IV连同密文一起发送到C ++程序

以下是如何在Java中设置IV,对于C ++,请参阅您正在使用的库的文档:

 byte[] iv = generateIv(cipher.getBlockSize());
 IvParameterSpec ivParams = new IvParameterSpec(iv);
 cipher.init(Cipher.ENCRYPT_MODE, key, ivParams);