2013-06-05 3 views
0

Я хочу сделать отступы с pkcs7:обивка с pkcs7 [C]

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 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 

Но я хочу:

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 

Как я могу изменить код?

Заранее спасибо.

ответ

0

С

printf("%x ", test2[i]); 

Вы печатаете в шестнадцатеричном формате (% х), тогда как с

printf("pad = %d\n", pad);` you are printing in decimal (%d). 

И (десятичное) 16 => (гекса) 10, так что вы показываете правильная вещь.

Возможно, вы можете немного поиграть с печатью, чтобы отобразить 16 вместо 10, но я не думаю, что это то, что вы ищете.

+0

Спасибо. Итак, с PKCS7 я должен выполнить десятичное значение 16 (= 10 (гекса)), а не значение шестнадцатеричной 16 (= 22 (десятичная)), правильно? –

+0

@ user1517752 Да, точно. значение пэда должно представлять собой длину (которая когда-либо используется) для заполнения. Для меня вы делаете все правильно! – yco

+0

@ user1517752 Будьте осторожны, хотя с использованием strlen в криптографических средах – yco

Смежные вопросы