Пропуск нулей в шестнадцатеричной печати - PullRequest
0 голосов
/ 03 октября 2019

Код, упомянутый ниже, генерирует ключи, используя библиотеку time.h, предоставленную C. Я пытаюсь печатать ключи побайтно, используя переменную a, но главная проблема, с которой я сталкиваюсь, это когда я копирую значение из key[i] до a он пропускает нули, потому что я использую %.2x при печати key[i], но не в a. я хочу сохранить байт в a с нулем тоже, как напечатано для key[i] для одного байта. Во-вторых, я хочу знать, как я могу объединить a после 16 итераций в одну строку finalKey

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#define KEYSIZE 16

typedef unsigned char BYTE;

void main()
{
//2018-04-17 23:08:49
//TOTAL SECONDS  = 1,524,006,529
long long int total_seconds = 1524006529;


char finalKey[KEYSIZE];
int i;
char key[KEYSIZE];
int x = 0;
printf("%lld",total_seconds);


for(x = 0;x<7200;x++){
srand (total_seconds--);

    //KEYSIZE = 16 so 16 Iterations each time prints a hexadecimal 
    //HAVE TO STORE WHOLE KEY in finalKey after 16 iterations

    for (i = 0; i< KEYSIZE; i++){

        key[i] = rand()%256;
        BYTE a;


        // printf("%.2x", (unsigned char)key[i]);
        // PRINTS = >  4dd733c6bc3d355ca2f90c4811d2960c

        a = (key[i]&0xFF);
        printf("%x",a);
        // PRINTS =>  4dd733c6bc3d355ca2f9c4811d296c ( removes 0 )


    }

    // system("openssl enc aes-128-cbc -d -in plaintext.txt -out output.txt -k " + finalKey +" -iv 09080706050403020100A2B2C2D2E2F2");

    printf("\n");
    }

}

1 Ответ

1 голос
/ 03 октября 2019

Вы хотите напечатать как минимум два символа с заполненными начальными нулями. Поэтому используйте это:

printf("%02x",a);

Ширина поля 2 указывает, что должны быть напечатаны как минимум два символа, а0 флаг означает, что результат должен быть дополнен нулями.

...