密码散列到C中的字符串散列

时间:2018-02-03 17:24:20

标签: c

如何在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哈希字符串。

1 个答案:

答案 0 :(得分:0)

你的长度错了。 Typedef返回一个类型的长度,这里的char数组以\ 0结尾。你需要使用strlen。