2016-04-03 57 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

變化hashunsigned 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