AES / CBC是否真的需要IV参数?

我正在编写一个简单的应用程序,以使用AES /

CBC(模式)对我的消息进行加密。据我了解,CBC模式需要IV参数,但我不知道为什么我的代码在不使用IV参数的情况下也能工作。任何人都可以解释为什么?谢谢。

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。请参阅Cipher类文档。

空IV(或确定性IV)的缺点是它容易受到字典攻击。IV的要求是防止相同的纯文本块每次生成相同的密文。

以上是 AES / CBC是否真的需要IV参数? 的全部内容, 来源链接: utcz.com/qa/427642.html

回到顶部