请引用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);
它工作正常,但返回十六进制字符串。
实现这一目标的最佳方法是什么?
谢谢。
最佳答案
解决方案非常简单明了。我只需更改格式:
来自
sprintf((char*)&(buf[i*2]), "%02x", hash[i]);
至
sprintf((char*)&(buf[i*2]), "%c", hash[i]);
谢谢大家给我指出正确的位置!
关于c - 如何在 c 中生成返回原始输出的 SHA1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47605867/