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