请参阅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等),但不会是像十六进制形式一样可读的人类可读。