如何将 SHA1 return 值转换为 ascii
How to convert SHA1 return value to ascii
我正在尝试创建用户输入的 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);
Print_hex:
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 散列。
我做错了什么?
您正在连续 sprintf
调用中覆盖转换后的字符串。检查这个:
char passHash[100] = {0,};
for(i=0;i<sizeof(temp);i++){
sprintf(passHash + i * 2, "%02x", temp[i]); // <-- each 2 bytes. e.g: 1 = 01, 255 = FF
}
printf("%s\n", passHash);
每个字节占用十六进制字符串中的 2 个字符,因此您需要将 sprintf
目标缓冲区增加 2。此外,temp
是您正在读取的缓冲区,因此您的 for
循环应该循环 sizeof(temp)
,而不是 sizeof(passHash)
。
顺便说一句,这是显示错误的示例代码,我并不是说这是最好的代码。
我正在尝试创建用户输入的 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);
Print_hex:
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 散列。
我做错了什么?
您正在连续 sprintf
调用中覆盖转换后的字符串。检查这个:
char passHash[100] = {0,};
for(i=0;i<sizeof(temp);i++){
sprintf(passHash + i * 2, "%02x", temp[i]); // <-- each 2 bytes. e.g: 1 = 01, 255 = FF
}
printf("%s\n", passHash);
每个字节占用十六进制字符串中的 2 个字符,因此您需要将 sprintf
目标缓冲区增加 2。此外,temp
是您正在读取的缓冲区,因此您的 for
循环应该循环 sizeof(temp)
,而不是 sizeof(passHash)
。
顺便说一句,这是显示错误的示例代码,我并不是说这是最好的代码。