如何在C语言中实现PKCS7填充?
在C语言中实现PKCS7填充(Padding with Known Length),当加密前的数据长度不是加密块大小的整数倍时,需要在原有数据的末尾添加一些特定字符,使得总的长度成为块大小的倍数。下面是简单的步骤:
计算填充长度: 计算剩余空间,即块大小减去原始数据长度除以块大小后的余数。
创建填充字符: 选择一个固定的数字(通常选择16进制的最大值,对于AES-128就是0xFF)作为填充字符。
填充数据: 循环填充指定的次数,每次添加填充字符到数组的末尾。例如,如果剩余空间是4,则添加4次填充字符。
下面是一个具体的实现片段:
```c #include <stdio.h> #include <stdlib.h>
// 添加PKCS7填充 void pkcs7_pad(uint8_t* data, size_t data_len, size_t block_size) { size_t padding_length = block_size - (data_len % block_size); // 填充长度 for (size_t i = 0; i < padding_length; i++) { data[data_len] = (uint8_t)padding_length; // 填充字符 data_len++; // 更新数据长度 } }
// 示例用法 uint8_t plaintext[] = "Hello, World!"; size_t plaintext_len = strlen((char*)plaintext); // 加上终止符'\0' size_t block_size = AES_BLOCK_SIZE;
// 确保数据长度是块大小的倍数 pkcs7_pad(plaintext, plaintext_len, block_size);
printf("After padding: "); for (size_t i = 0; i < plaintext_len; i++) printf("%02X ", plaintext[i]); printf("\n");
相关推荐


















