例如,不同意相同字符串的md5哈希值

时间:2013-08-23 21:06:31

标签: php hash

这让我发疯,我的md5不同意。我有这个字符串:

  

组合生成器是一个允许您轻松创建的工具   通过选择相关属性的一系列组合。对于   例如,如果你要销售三种不同尺码和两种尺寸的T恤   不同的颜色,发生器将为您创建六种组合。

当我使用md5函数(使用php 5.5.0)在我的计算机上散列它时,它产生以下散列:422f3f656e1a5f95e8b5cf7565d815b5

http://www.miraclesalad.com/webtools/md5.php同意我的电脑结果。

http://www.md5.cz/不同意我的电脑和miraclesalad。

此字符串/ md5对最初由另一台计算机计算,该计算机也提供与md5.cz相同的结果。

我读到有关编码问题(虽然字符串不包含任何非ASCII字符),所以我在我的计算机上尝试了以下代码:

<?php

$str = "The Combinations Generator is a tool that allows you to easily create a series of combinations by selecting the related attributes. For example, if you're selling t-shirts in three different sizes and two different colors, the generator will create six combinations for you.";

echo "$str<BR/>";
echo md5($str)."<BR/>";
echo md5(utf8_encode($str))."<BR/>";
echo md5(utf8_decode($str))."<BR/>";


die();

输出结果为:

  

组合生成器是一个允许您轻松创建的工具   通过选择相关属性的一系列组合。对于   例如,如果你要销售三种不同尺码和两种尺寸的T恤   不同的颜色,发生器将为您创建六种组合。

     

422f3f656e1a5f95e8b5cf7565d815b5

     

422f3f656e1a5f95e8b5cf7565d815b5

     

422f3f656e1a5f95e8b5cf7565d815b5

所以这不是关于utf8。

知道发生了什么事吗?

4 个答案:

答案 0 :(得分:5)

我最好的猜测是它与“你是”中的'标记'和字符编码有关。如果删除该引用,则两个站点都报告相同的md5。

答案 1 :(得分:0)

我尝试将上面的字符串递增到您在问题中链接到的两个网站,结果发现在md5.cz中打破生成器的角色是撇号,如果您正在销售T恤。

如果你在将特殊字符串添加到一个哈希之前去除它,可能会使用urlencode()之类的东西保留字符串的唯一性,你应该得到任何字符串的匹配哈希值。

答案 2 :(得分:0)

字符串必须完全相同,包括空格。 可能这些网站正在使用一些转换,如trim()或stripslashes()。 只有在字符串准确的情况下,md5才会返回相同的值。

答案 3 :(得分:-1)

md5是md5。这里的所有都是它的。如果你从不同的(非错误的)实现中得到不同的哈希值,那么你就会输入不同的输入。请记住,如果输入甚至略有不同,md5将被设计为产生截然不同的输出。一个测试字符串末尾的单个空格字符(制表符,换行符......等)将完全删除您预期的哈希值,因为您输入了不同的输入。