2016-04-03 2 views
1

У меня есть следующий код для вычисления хэша SHA512:Как напечатать SHA512 хэш в C

#include <stdio.h> 
#include <string.h> 
#include <openssl/sha.h> 

int main() { 
    char *password = "test"; 
    char hash[SHA512_DIGEST_LENGTH]; 

    SHA512(password, strlen(password), hash); 

    return 0; 
} 

Как распечатать вычисленной хэш в шестнадцатеричном?

Благодаря

+0

Перечислив байты в хеше и сбросив их представление в виде шестнадцатеричных символов (0..9, a..f) на консоль. Есть несколько способов сделать это. – WhozCraig

ответ

2

Изменить hash быть unsigned char hash[SHA512_DIGEST_LENGTH]. Затем:

for(int i = 0; i < SHA512_DIGEST_LENGTH; ++i) { 
    printf("%02x", hash[i]); 
} 
+0

я использовал одну из этих онлайн sha512 хэш-калькуляторов и sha512 хэш в шестнадцатеричном для «теста» является ee26b0dd4af7e749aa1a8ee3c10ae9923f618980772e473f8819a5d4940e0db27ac185f8a0e1d5f84f88bc887fd67b143732c304cc5fa9ad8e6f57f50028a8ff, который не то, что я вижу, когда я напечатать его, используя код, который Вы отправляли сообщение. Не могли бы вы рассказать мне, почему? – user3266083

+0

Ждите, что я плохой, это так. Он добавляет ffffff к каждому из 4 байтов. Почему это? – user3266083

+1

Вы можете увидеть «ffffff», если у вас есть подписанные символы, так как он будет повышен до 'int', и вы получите расширение знака для отрицательных значений. Чтобы исправить это, сначала сбрасывайте символы, как '(unsigned char) hash [i]'. – FatalError

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