加密模式填充模式

tech2022-09-24  107

加密模式

ECB[Electronic codebook, 电子密码本]

需要加密的消息按照块密码的块大小被分为数个块,并对每个块进行独立加密

优点:可以并行处理数据

缺点:安全性差,同样的原文生成同样的密文, 不能很好的保护数据

CBC[Cipher-block chaining, 密码块链接]

每个明文块先与前一个密文块进行异或后,再进行key加密。在这种方法中,每个密文块都依赖于它前面的所有明文块.

优点:同样的原文生成密文不一样,安全性较强

缺点:执行速度慢,串行处理数据


填充模式

当需要按块处理的数据,数据长度不符合块处理需求时,按照一定的方法去填充块长的规则

-分类:

NoPadding

–不填充

–在DES加密算法下,要求原文的长度必须是8字节整数倍

–在AES加密算法下,要求原文的长度必须是16字节整数倍

PKCS5Padding

–数据块的大小为8位, 不够就补足


tips:

默认情况下,加密模式和填充模式为:ECB/PKCS5Padding如果使用CBC模式,在初始化Cipher对象时, 需要增加参数, 初始化向量IV : IvParameterSpec iv = new IvParameterSpec(key.getBytes());

加密模式和填充模式

AES/CBC/NoPadding (128) AES/CBC/PKCS5Padding (128) AES/ECB/NoPadding (128) AES/ECB/PKCS5Padding (128) DES/CBC/NoPadding (56) DES/CBC/PKCS5Padding (56) DES/ECB/NoPadding (56) DES/ECB/PKCS5Padding (56) DESede/CBC/NoPadding (168) DESede/CBC/PKCS5Padding (168) DESede/ECB/NoPadding (168) DESede/ECB/PKCS5Padding (168) RSA/ECB/PKCS1Padding (1024, 2048) RSA/ECB/OAEPWithSHA-1AndMGF1Padding (1024, 2048) RSA/ECB/OAEPWithSHA-256AndMGF1Padding (1024, 2048)

== 举个例子(代码同上一篇的对称加密代码一致,这里只是讲解关于加密模式和填充模式部分)===

开始的默认情况下:

String input = “对称加密算法”;

String transformation = “DES”;

输出密文: qDhh3hjbd+/TESXcV0YxC4ArDlFR1Mor


DES/ECB/PKCS5Padding

String input = “对称加密算法”;

String transformation = “DES/ECB/PKCS5Padding”;

输出密文: qDhh3hjbd+/TESXcV0YxC4ArDlFR1Mor


DES/CBC/PKCS5Padding

String input = “对称加密算法”;

String transformation = “DES/CBC/PKCS5Padding”;

因为CBC加密模式需要指定初始向量,初始向量中密钥的长度必须是8个字节

所以我们在加密算法代码中来创建一个iv变量,传入的参数为字节数组

IvParameterSpec iv = new IvParameterSpec(“12345678”.getBytes());

cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec,iv);

同样,我们在加密算法代码引入vi向量,也要在解密算法代码中引入vi向量

在解密算法中来创建一个vi向量

IvParameterSpec iv = new IvParameterSpec(key.getBytes());

cipher.init(Cipher.DECRYPT_MODE,secretKeySpec,iv);

加密:o7WeYG/HJv7o0QMm2jut9MtU48kqqB1F 解密:对称加密算法


DES/CBC/NoPadding

如果使用的是不填充的模式,那么原文必须是8个字节的整数倍,否则报错

在UTF-8下,一个中文对应3个字节

String input = “对称12”;

String transformation = “DES/CBC/NoPadding”;

加密:vSYB34GyAes= 解密:对称12

最新回复(0)