2016-04-03 11 views
1

Ich habe den folgenden Code, um die sha512 Hash zu berechnen:Wie drucken SHA512 Hash in 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; 
} 

Wie aus dem berechneten Hash in hex drucken?

Dank

+0

Durch Aufzählung der Bytes im Hash und Dumping ihrer Darstellung als Hex-Zeichen (0..9, a..f) auf der Konsole. Es gibt * mehrere * Möglichkeiten, dies zu tun. – WhozCraig

Antwort

2

ändern hashunsigned char hash[SHA512_DIGEST_LENGTH] zu sein. Dann:

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

Ich habe eines dieser Online-sha512 Hash-Rechner und die sha512 Hash in hex für „test“ ist ee26b0dd4af7e749aa1a8ee3c10ae9923f618980772e473f8819a5d4940e0db27ac185f8a0e1d5f84f88bc887fd67b143732c304cc5fa9ad8e6f57f50028a8ff, die nicht das, was ich sehe, wenn ich es drucken Sie den Code aus, die Sie auf dem Laufenden. Würdest du mir bitte sagen, warum ist das so? – user3266083

+0

Warten Sie mein schlecht, es ist. Es hat ffffff jedem 4 Byte vorangestellt. Warum das? – user3266083

+1

Sie könnten sehen, dass das 'ffffff' vorangestellt ist, wenn Sie chars signiert haben, da es zu' int' hochgestuft wird und Sie eine Vorzeichenerweiterung für negative Werte erhalten. Um es zu beheben, wirf zuerst, wie '(unsigned char) hash [i]'. – FatalError