请参阅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);
它工作正常,但以十六进制返回字符串。
实现这一目标的最佳方法是什么?
感谢。
答案 0 :(得分:1)
解决方案非常简单明显。我只需要更改格式:
这
sprintf((char*)&(buf[i*2]), "%02x", hash[i]);
到
sprintf((char*)&(buf[i*2]), "%c", hash[i]);
谢谢大家指点我正确的位置!
答案 1 :(得分:0)
你已经收到了原始形式的哈希(假设SHA1有效),如果你想写这样做(使用fwrite等),但它不会像人类一样可读,就像六角形式一样