Hash 如何获得正确的sha1值,由HaveibeenPowned重新记录?

Hash 如何获得正确的sha1值,由HaveibeenPowned重新记录?,hash,passwords,sha1,Hash,Passwords,Sha1,我想在HaveibeenPowned的sha1哈希pw文件的帮助下检查我的密码。当然我想在本地做;-)。为了能够将这些散列与我根据密码创建的sha1散列进行比较,我使用了两种不同的方法: php: c: 第一个问题是:为什么散列是不同的?有隐藏的盐吗? 为什么这首歌跟特洛伊·亨特的歌不一样 [更新]同时php哈希在列表中匹配。我没有将字符串限制为40个字符,并且字符串中有“\r”和“\n”。您正在计算两个不同数据块的SHA1哈希 在PHP代码中: $pw='1234'; $pwhash = st

我想在HaveibeenPowned的sha1哈希pw文件的帮助下检查我的密码。当然我想在本地做;-)。为了能够将这些散列与我根据密码创建的sha1散列进行比较,我使用了两种不同的方法:

php:

c:

第一个问题是:为什么散列是不同的?有隐藏的盐吗? 为什么这首歌跟特洛伊·亨特的歌不一样


[更新]同时php哈希在列表中匹配。我没有将字符串限制为40个字符,并且字符串中有“\r”和“\n”。

您正在计算两个不同数据块的SHA1哈希

在PHP代码中:

$pw='1234';
$pwhash = strtoupper(sha1($pw));
我猜想,您正在计算4字节序列的散列(我对PHP不太了解)。结果应为
7110eda4d09e062aa5e4a390b0a572ac0d2c0220

在您的C代码中(顺便说一句,这是不完整的;这个
SHA
函数来自哪里?)

pwlen
是5,而不是4,因为将
sizeof
应用于字符串文字将为字符串长度加上终止的
'\0'
字符的1。您正在计算序列
{'1','2','3','4','0'}
的SHA1和,它应该是
8bef71a3d039e425fe43872cc178441c206b3fda

试试这个:

char pw[] = "1234";
SHA1(pw, strlen(pw), pwhash);
char pw[] = "1234";
SHA1(pw, strlen(pw), pwhash);
在您的C代码中(顺便说一句,这是不完整的;这个
SHA
函数来自哪里?)

pwlen
是5,而不是4,因为将
sizeof
应用于字符串文字将为字符串长度加上终止的
'\0'
字符的1。您正在计算序列
{'1','2','3','4','0'}
的SHA1和,它应该是
8bef71a3d039e425fe43872cc178441c206b3fda

试试这个:

char pw[] = "1234";
SHA1(pw, strlen(pw), pwhash);
char pw[] = "1234";
SHA1(pw, strlen(pw), pwhash);
如果您在类Unix系统上或安装了
sha1sum1
命令,则获取给定密码的SHA1校验和的更简单方法是:

echo -n 'your_password' | sha1sum
如果要删除输出行末尾的“-”,可以通过sed管道输出

echo -n 'your password' | sha1sum | sed 's/ .*//'

回答得很好,基思。是的,这帮了大忙!现在,两个版本都运行得很好:-)。我不明白的是:你和我,我们看到php和c有不同的哈希。这意味着,你是对的,但我不明白,为什么这些是不同的块?啊,还有sha1()。。。通过#include解决了这一问题。SHA1哈希函数的定义与语言无关。结果会有所不同,因为您的PHP代码正在计算4字节序列
{'1','2','3','4'}
的校验和,而C代码正在计算5字节序列
{'1','2','3','4','0'}
的校验和。我的回答不清楚吗?哦,基思,别担心。你尽了最大的努力!我不明白“0”将是哈希的一部分。再次感谢您的详细信息!我所有的问题都得到了完美的回答:-)
echo -n 'your_password' | sha1sum
echo -n 'your password' | sha1sum | sed 's/ .*//'