为什么我的SHA1哈希值不匹配?

3

我觉得上次我没有说得够清楚,让我们来看看:

我有一个十六进制字符串:

742713478fb3c36e014d004100440041004 e0041004e00000060f347d15798c9010060 6b899c5a98c9014d007900470072006f007 500700000002f0000001f7691944b9a3306 295fb5f1f57ca52090d35b50060606060606

理论上,最后的20个字节应该包含前面部分(完整字符串-20个字节)的SHA1哈希值。但是对于我来说它不匹配。

试图用PHP做到这一点,但没有成功。你能找到匹配吗?

票据:

742713478fb3c36e014d004100 440041004e0041004e00000060 f347d15798c90100606b899c5a 98c9014d007900470072006f00 7500700000002f0000001f7691944b9a

附加到原始票证的sha1哈希:

3306295fb5f1f57ca52090d35b50060606060606

我的票证sha1哈希:

b6ecd613698ac3533b5f853bf22f6eb4afb94239

这里是票证中的内容以及它是如何存储的。值得一提的是,我可以提取出用户名等信息,并找到各种分隔符。 http://www.codeproject.com/KB/aspnet/Forms_Auth_Internals/AuthTicket2.JPG

编辑:我发现字符串在此之前经过的解密函数会在末尾进行填充。我删除了最后6个字节,并相应地调整了我的票证和哈希。仍然不起作用,但我更接近了。

5个回答

5

你的票据是基于十六进制字符串本身进行计算的。也许附加的哈希值是在同一数据的另一个表示上计算的?


澄清一下,我尝试从原始数据中剪切掉最后20个字节,但没有成功。 - lynn
你得到的值是什么格式?这个值本身代表什么?你从哪里获取它?哈希设计上是混乱的:不同的格式会产生巨大的差异。你不能询问原始哈希是如何计算的吗? - Welbog
该票据:http://www.codeproject.com/KB/aspnet/Forms_Auth_Internals/AuthTicket2.JPG。这是经过哈希处理的,然后附加了哈希值。 - lynn
你接受了我的答案?实际问题是什么?我很好奇。 - Welbog
这只是我的猜测。我还在努力解决问题,但这可能是原因,因为我的 .net 同事可以在他的端上复制哈希值。等我完成后,我会更新发现的情况。 - lynn
显示剩余2条评论

4

我认为您对字节与字符混淆了。

在内部,PHP将字符串中的每个字符存储为一个字节。 PHP生成的sha1散列是20字节二进制数据的40个字符(40字节)十六进制表示,因为每个二进制值都需要用2个十六进制字符表示。

我不确定这是否是您差异的实际来源,但看到这种误解使我想知道它是否有关联。


$ticket = substr($decrypthex, 0, -40); $hash = substr($decrypthex, -40); echo sha1($ticket); $ticket = 截取字符串($decrypthex, 0, -40); $hash = 截取字符串($decrypthex, -40); echo sha1($ticket); - lynn
仍然是字符...你想做的是对于每两个字符,执行chr(hexdec('0b'));(0b是一个示例,我会让你创建循环逻辑) - Andrew Moore
请记住,如果原始代码是ASP.net格式,您可能还会有字符编码差异(UTF-8与ASCII)。 - Andrew Moore

2

首先尝试修剪字符串,因为很容易在末尾出现换行符或空格,这会完全改变哈希值。


我可以正确提取其他信息,并且在检查字符串时它的格式已经适当,分隔符出现在预期位置等。但我希望这是问题所在! - lynn
实际上,这确实是问题的一部分。该字符串已被解密,并且使用的函数会填充字符串的末尾。 - lynn

1
根据这个在线SHA1工具,给定文本的哈希值(去除换行和空格后)为:
b6ecd613698ac3533b5f853bf22f6eb4afb94239

注意:确保您输入的字符不是十六进制数字,而是 PHP 版本。

这就是我得到的,可以看到上面我展示了票据的sha1哈希值。 - lynn

1
问题在于原始数据是带密钥的哈希。我需要使用带有验证密钥的hash_hmac()函数,而不是仅仅使用sha1()函数。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接