分组加密
在密码学中,分组加密(Block cipher),又称分块加密或块密码,是一种对称密钥算法。 它将明文分成多个等长的模块(block),使用确定的算法和对称密钥对每组分别加密解密。
常见的分组加密算法有: DES、3DES、AES、IDEA。
常见分组密码算法分组长度和秘钥长度如下表:
密码算法 | 分组长度 | 秘钥长度 |
---|---|---|
DES | 64 bit/8 byte | 64(56+8) bit/8 byte |
3DES | 64 bit/8 byte | 64/64*2/64 * 3 bit |
AES | 128 bit/16 byte | 128/192/256 bit |
填充 padding
一般的填充方式有以下几种:
ANSI X9.23
ANSIX923 填充字符串由一个字节序列组成,此字节序列的最后一个字节填充字节序列的长度,其余字节均填充数字零。
假定块长度为8,数据长度为 9,数据: FF FF FF FF FF FF FF FF FF,填充: FF FF FF FF FF FF FF FF FF 00 00 00 00 00 00 07
ISO10126
ISO10126 填充字符串由一个字节序列组成,此字节序列的最后一个字节填充字节序列的长度,其余字节填充随机数据。
假定块长度为 8,数据长度为 9,数据: FF FF FF FF FF FF FF FF FF,填充: FF FF FF FF FF FF FF FF FF 7D 2A 75 EF F8 EF 07
PKCS7 (RFC5652)
PKCS7 填充字符串由一个字节序列组成,每个字节填充该字节序列的长度。
假定块长度为 8,数据长度为 9,数据: FF FF FF FF FF FF FF FF FF,填充: FF FF FF FF FF FF FF FF FF 07 07 07 07 07 07 07,如果恰好8个字节时还要补8个字节的0x08,可以让解密的数据很确定无误的移除多余的字节。 PKCS5 Padding 和 PKCS7 Padding 在这方面是类似的。不同点在于,选择算法的时候如果选用 PKCS5 Padding 填充模式,就是明确指定块大小是 8 个字节。选用 PKCS7 Padding 则是没有明确指定块大小。如果选择算法的时候选用 PKCS7 Padding 填充模式,同时设置块大小为 8 字节,和选用 PKCS5 Padding 填充模式,没有设置块大小(实际已经设置了 8 字节),这两种情况下,两种填充模式没有区别。另外有个值得注意的是,AES 中块大小是固定 16 字节。
补零
填充字符串由设置为零的字节组成