填充PKCS7[C]

填充PKCS7[C],c,padding,pkcs#7,C,Padding,Pkcs#7,我想用PKCS7进行填充: char *test1 = "azertyuiopqsdfgh"; char *test2 = malloc(32*sizeof(char)); memcpy(test2, test1, strlen(test1)); char pad = (char)(32-strlen(test1)); printf("pad = %d\n", pad); for(int i = strlen(test1) ; i < 32 ; i++) { test2[i]

我想用PKCS7进行填充:

char *test1 = "azertyuiopqsdfgh";
char *test2 = malloc(32*sizeof(char));

memcpy(test2, test1, strlen(test1));

char pad = (char)(32-strlen(test1));
printf("pad = %d\n", pad);

for(int i = strlen(test1) ; i < 32 ; i++) {
    test2[i] = pad;
}
for (int i = 0 ; i < 32 ; i++)
    printf("%x ", test2[i]);
printf("\n");
但我想:

pad = 16

61 7a 65 72 74 79 75 69 6f 70 71 73 64 66 67 68 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16
如何修改我的代码

提前感谢。

printf("%x ", test2[i]);
您正在以十六进制(%x)打印,而

printf("pad = %d\n", pad);` you are printing in decimal (%d). 
(十进制)16=>(十六进制)10,因此显示的内容是正确的


您可以稍微调整一下打印以显示16而不是10,但我认为这不是您要搜索的内容。

谢谢。因此,对于PKCS7,我必须用十进制值16(=10(十六进制))来完成,而不是十六进制值16(=22(十进制)),对吗?@user1517752是的,没错。pad的值必须表示填充的长度(使用哪个基)。对我来说,你做得对@用户1517752在加密环境中使用strlen时要小心。密码术通常使用字符数组来表示整数。因此,如果加密数据中有一个0(在ascii中是\0),strlen会将其解释为字符串的结尾。出于同样的原因,打印(“%s”,加密数据)是不安全的。但这只是一个一般性的建议,如果我没记错的话,pkcs7填充在加密之前。
printf("pad = %d\n", pad);` you are printing in decimal (%d).