Как преобразовать возвращаемое значение SHA1 в ascii - PullRequest
0 голосов
/ 12 ноября 2018

Я пытаюсь создать хэш SHA1 для пользовательского ввода и сохранить его в строковом значении, чтобы я мог сравнить его с текстовым файлом известных хэшей.

Чтобы создать хеш:

SHA1(password,strlen(password),temp);
print_hex(temp, sizeof(temp));

Преобразовать хеш:

for(i=0;i<sizeof(passHash);i++){
    sprintf(&passHash[i], "%02x", temp[i]);    
}
printf("%s\n", passHash);

Print_hex:

void print_hex(unsigned char *buf, int len){
    int i;
    for(i=0;i<len;i++){
        printf("%02x",buf[i]);
    }
    printf("\n");
}

Когда я запускаю программу с известным хешированным паролем, таким как «пароль», он показывает правильный хеш с print_hex, но не после sprintf. Поэтому я знаю, что неправильно конвертирую хэш SHA1.

Что я делаю не так?

1 Ответ

0 голосов
/ 12 ноября 2018

Вы перезаписываете свою преобразованную строку последовательными sprintf вызовами. Проверьте это:

char passHash[100] = {0,};
for(i=0;i<sizeof(temp);i++){
    sprintf(passHash + i * 2, "%02x", temp[i]); // <-- each 2 bytes. e.g: 1 = 01, 255 = FF
}
printf("%s\n", passHash);

Каждый байт занимает 2 символа в шестнадцатеричной строке, поэтому вам необходимо увеличить целевой буфер sprintf на 2. Кроме того, temp - это буфер, из которого вы читаете, поэтому ваши циклы for должны циклически повторяться для sizeof(temp), а не sizeof(passHash).

Кстати, это пример кода, который показывает вашу ошибку, и я не говорю, что это лучший код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...