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

标签 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);

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

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

谢谢。

最佳答案

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

来自

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/

相关文章:

c - 为什么 setjmp() 在 Windows 上需要 2 个参数,而在 Linux 上只需要 1 个参数?

c# - SHA1哈希问题

go - 堆叠写入器和 zlib.writer 的校验和错误

android - 如何在 Cordova 项目中找到 SHA1

c - 错误 : expected '=' , ',' , ';' , 'asm' 或 '__attribute__' 在 enableSSHSFTPKeyMode 之前

c - 如何将gets()代码更改为fgets()?

android - 什么是 SHA1 指纹?

sql - 关于在数据库中保存密码的问题

c - 在我的程序中使用 C/C++ <Thread> 吗?

c - 将结构与零进行比较的首选方法