如何在c中返回原始输出的SHA1?

时间:2017-12-02 08:04:15

标签: c sha1

请参阅http://php.net/manual/en/function.sha1.php

如果可选的raw_output设置为TRUE,则sha1摘要将以原始二进制格式返回,长度为20,否则返回的值为40个字符的十六进制数。

我目前的代码是

char *concat = "somestring";
int i = 0;
unsigned char hash[SHA_DIGEST_LENGTH];
char buf[SHA_DIGEST_LENGTH*2];

memset(buf, 0x0, SHA_DIGEST_LENGTH*2);
memset(hash, 0x0, SHA_DIGEST_LENGTH);

SHA1((unsigned char *)concat, strlen(concat), hash);

for (i=0; i < SHA_DIGEST_LENGTH; i++) {
    sprintf((char*)&(buf[i*2]), "%02x", hash[i]);
}

printf("<<sha1=%s>>\n", buf);

它工作正常,但以十六进制返回字符串。

实现这一目标的最佳方法是什么?

感谢。

2 个答案:

答案 0 :(得分:1)

解决方案非常简单明显。我只需要更改格式:

sprintf((char*)&(buf[i*2]), "%02x", hash[i]);

sprintf((char*)&(buf[i*2]), "%c", hash[i]);

谢谢大家指点我正确的位置!

答案 1 :(得分:0)

你已经收到了原始形式的哈希(假设SHA1有效),如果你想写这样做(使用fwrite等),但它不会像人类一样可读,就像六角形式一样