【发布时间】:2018-11-12 19:12:19
【问题描述】:
我正在尝试创建用户输入的 SHA1 哈希并将其存储在字符串值中,以便我可以将其与已知哈希的文本文件进行比较。
创建哈希:
SHA1(password,strlen(password),temp);
print_hex(temp, sizeof(temp));
转换哈希:
for(i=0;i<sizeof(passHash);i++){
sprintf(&passHash[i], "%02x", temp[i]);
}
printf("%s\n", passHash);
打印十六进制:
void print_hex(unsigned char *buf, int len){
int i;
for(i=0;i<len;i++){
printf("%02x",buf[i]);
}
printf("\n");
}
当我使用已知的散列密码(例如“password”)运行程序时,它会使用 print_hex 显示正确的散列,但不会在 sprintf 之后显示。因此,我知道我错误地转换了 SHA1 哈希。
我做错了什么?
【问题讨论】:
-
passHash是什么?如果是指针,sizeof(passHash)可能不会给你你想要的。 -
您永远不应该对用户密码进行 SHA1 处理。传统的加密哈希函数不适用于密码。相反,您应该使用基于密码的密钥派生函数,例如 bcrypt、scrypt、pbkdf2 或 argon2。 Here's why.
-
你得到了什么?你能指望什么?你读过How to create a Minimal, Complete, and Verifiable example 吗?
标签: c sha1 data-conversion