我在C中使用SHA512来获取哈希值。我是这样做的:
#include <stdlib.h>
#include <stdio.h>
#include <openssl/sha.h>
int main(int argc, char *argv[]){
unsigned char hash[SHA512_DIGEST_LENGTH];
char data[] = "data to hash"; //Test Data
SHA512(data, sizeof(data) - 1, hash); //Kill termination character
//Now there is the 64byte binary in hash
我试图通过以下方式将其转换为十六进制:
long int binaryval, hexadecimalval = 0, i = 1, remainder;
binaryval=(long int)hash;
while (binaryval != 0)
{
remainder = binaryval % 10;
hexadecimalval = hexadecimalval + remainder * i;
i = i * 2;
binaryval = binaryval / 10;
}
printf("Outpunt in Hex is: %lX \n", hexadecimalval);
printf("%d\n",(long int) awhash );
return 0;
}
但这不是我想要的。
如何将无符号字符中的二进制转换为人类可读格式?用于打印的char []中的最佳案例。
“要哈希的数据”的哈希应该是:
d98f945fee6c9055592fa8f398953b3b7cf33a47cfc505667cbca1adb344ff18a4f442758810186fb480da89bc9dfa3328093db34bd9e4e4c394aec083e1773a
答案 0 :(得分:1)
只需在printf()中使用%x打印每个字符。不要转换,只需使用原始数据:
int main(int argc, char *argv[]){
unsigned char hash[SHA512_DIGEST_LENGTH];
char data[] = "data to hash"; //Test Data
SHA512(data, sizeof(data) - 1, hash); //Kill termination character
//Now there is the 64byte binary in hash
for(int i=0; i<64; i++)
{
printf("%02x", hash[i]);
}
printf("\n");
}
编辑为只输出十六进制值,不输入逗号或空格。