填充PKCS7[C]
我想用PKCS7进行填充:填充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]
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).