如何在返回原始输出的C中制作SHA1



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

如果可选的RAW_OUTPUT设置为true,则SHA1 Digest以RAW二进制格式返回,长度为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);

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

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

谢谢。

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

来自

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

to

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

谢谢大家将我指向正确的位置!

您已经以原始形式收到的哈希(假设sha1有效),如果您想写的话(使用fwrite等),但不会是像十六进制形式一样可读的人类可读。

最新更新