如何在C中创建简单的密码哈希函数?我知道有一个标准库,crypt.h
,还有openssl/sha.h
但是这不会产生字符串。我尝试过不同的方法来打印sha256字符串,但字符串与同一个字的其他sha256字符串不同。
散列到sha256的代码我在本网站的主题中找到了:
char input[] = "hello";
int length = sizeof(input);
SHA256_CTX context;
unsigned char md[SHA256_DIGEST_LENGTH];
SHA256_Init(&context);
SHA256_Update(&context, (unsigned char *)input, length);
SHA256_Final(md, &context);
printf("%02x\n", md); // every time different value: c94ce410, 46d384c0 ..
printf("sizeof md = %zu\n", sizeof(md));
int i;
for(i = 0; i <= sizeof(md); i++) {
printf("%02x", md[i]); // not a sha256..
printf("%u", md[i]); // only numeric, not correct..
}
printf("\n");
它产生的字符串是:
f3aefe62965a91903610f0e23cc8a69d5b87cea6d28e75489b0d2ca02ed7993c62
但这不是hello
的sha256字符串,因为在线解密服务无法识别它。我正在使用#include <openssl/sha.h>
。
修改
正确设置:
int length = strlen(input);
int i;
for(i = 0; i < sizeof(md); i++) {
printf("%0x", md[i]);
//printf("%u", md[i]);
}
printf("\n");
现在生成了正确的sha256哈希字符串。
答案 0 :(得分:0)
你的长度错了。 Typedef返回一个类型的长度,这里的char数组以\ 0结尾。你需要使用strlen。