加密模式、填充模式
加密模式
ECB:电子密码本(将文本分块加密),
使用同一个key
可以并行处理,速度块,
数据安全性比较弱
CBC:密码快链接
每个明文块先与前一个密文块进行异或处理后,在进行加密
每个密文块依赖于前面的明文块(IV向量)
速度慢
安全
=========
填充模式
NoPadding 不填充(什么都不做)
在DES加密算法下,要求原文长度必须是8byte的整数倍
在AES加密算法下,要求原文长度必须是16byte的整数倍
PKCS5Padding
数据块的大小为8位,不够就补足
默认情况下 加密模式和填充模式为:ECB/PKCS5Padding
如果使用CBC模式,在初始化Cipher对象时,需要增加参数,初始化向量IV:
IVParameterSpec iv=new IvParemeterSpec(key.getBytes());
=======
String transformation = "DES";
加密:l2A+Pb0g5xA=
String transformation = "DES/ECB/PKCS5Padding";
加密:l2A+Pb0g5xA=
String transformation = "DES/CBC/PKCS5Padding";
java.security.InvalidKeyException:
String transformation = "DES/CBC/PKCS5Padding";
IvParameterSpec iv = new IvParameterSpec(key.getBytes());
cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, iv);
cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, iv);
加密:bQNG2dNFS/U=
String transformation = "DES/CBC/NoPadding";
javax.crypto.IllegalBlockSizeException: Input length not multiple of 8 bytes
如果使用不填充,需要原文为8字节整数倍,否则报错(iv向量的key也必须是8字节)
String input = "科学12"
String key = "12345678";
String transformation = "DES/CBC/NoPadding";
加密:zpanGX+NZis=