gpt4 book ai didi

java - AES/CBC 真的需要 IV 参数吗?

转载 作者:搜寻专家 更新时间:2023-10-31 19:55:32 25 4
gpt4 key购买 nike

我正在编写一个简单的应用程序来使用 AES/CBC(模式)加密我的消息。据我了解,CBC 模式需要 IV 参数,但我不知道为什么我的代码在没有使用 IV 参数的情况下工作。任何人都可以解释为什么?谢谢。

打印的密文:T9KdWxVZ5xStaisXn6llfg==无一异常(exception)。

public class TestAES {

public static void main(String[] args) {

try {
byte[] salt = new byte[8];
new SecureRandom().nextBytes(salt);

SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
KeySpec keySpec = new PBEKeySpec("myPassword".toCharArray(), salt, 100, 128);

SecretKey tmp = keyFactory.generateSecret(keySpec);
SecretKeySpec key = new SecretKeySpec(tmp.getEncoded(), "AES");

Cipher enCipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
enCipher.init(Cipher.ENCRYPT_MODE, key);

// enCipher.init(Cipher.ENCRYPT_MODE, key, new IvParameterSpec(iv));

byte[] cipherBytes = enCipher.doFinal("myMessage".getBytes());
String cipherMsg = BaseEncoding.base64().encode(cipherBytes);

System.out.println("Encrypted message: " + cipherMsg);

} catch (Exception ex) {
ex.printStackTrace();
}

}
}

最佳答案

当它在没有 IV 的情况下使用时,对于包括 AES 在内的某些类型的密码,它隐式使用 0 IV。请参阅密码类 documentation .

空 IV(或确定性 IV)的缺点是它容易受到字典攻击。 IV的要求是防止同一个明文 block 每次都产生相同的密文。

关于java - AES/CBC 真的需要 IV 参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20888851/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com