填充模式,PKCS#5/PKCS7
‘填充模式,PKCS#5/PKCS7’ https://blog.csdn.net/test1280/article/details/75268255 填充模式: PKCS#5/PKCS7 首先我们要了解下啥是填充模式。 在分组加密算法中 (例如DES) ,我们首先要将原文进行分组,然后每个分组进行加密,然后组装密文。 其中有一步是分组。 如何分组? 假设我们现在的数据长度是24字节,BlockSize是8字节,那么很容易分成3组,一组8字节; 考虑过一个问题没,如果现有的待加密数据不是BlockSize的整数倍,那该如何分组? 例如,有一个17字节的数据,BlockSize是8字节,怎么分组? 我们可以对原文进行填充 (padding) ,将其填充到8字节的整数倍! 假设使用PKCS#5进行填充 (以下都是以PKCS#5为示例) ,BlockSize是8字节 (64bit) : 待加密数据原长度为1字节: 0x41 填充后: 0x410x070x070x070x070x070x070x07 待加密数据原长度为2字节: 0x410x41 填充后: 0x410x410x060x060x060x060x060x06 待加密数据原长度为3字节: 0x410x410x41 填充后: 0x410x410x410x050x050x050x050x05 待加密数据原长度为4字节: 0x410x410x410x41 填充后: 0x410x410x410x410x040x040x040x04 待加密数据原长度为5字节: 0x410x410x410x410x41 填充后: 0x410x410x410x410x410x030x030x03 待加密数据原长度为6字节: 0x410x410x410x410x410x41 填充后: 0x410x410x410x410x410x410x020x02 待加密数据原长度为7字节: 0x410x410x410x410x410x410x41 填充后: 0x410x410x410x410x410x410x410x01 待加密数据原长度为8字节: 0x410x410x410x410x410x410x410x41 填充后: 0x410x410x410x410x410x410x410x410x080x080x080x080x080x080x080x08 假设待加密数据长度为x,那么将会在后面padding的字节数目为8-(x%8),每个padding的字节值是8-(x%8)。 特别地,当待加密数据长度x恰好是8的整数倍,也是要在后面多增加8个字节,每个字节是0x08。 给出一个PKCS#5的实现: static size_t padding(unsigned char *src, size_t srcLen) { // PKCS#5 size_t paddNum = 8 - srcLen % 8; ...