这让我发疯,我的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。
知道发生了什么事吗?
答案 0 :(得分:5)
我最好的猜测是它与“你是”中的'标记'和字符编码有关。如果删除该引用,则两个站点都报告相同的md5。
答案 1 :(得分:0)
我尝试将上面的字符串递增到您在问题中链接到的两个网站,结果发现在md5.cz中打破生成器的角色是撇号,如果您正在销售T恤。
如果你在将特殊字符串添加到一个哈希之前去除它,可能会使用urlencode()之类的东西保留字符串的唯一性,你应该得到任何字符串的匹配哈希值。
答案 2 :(得分:0)
字符串必须完全相同,包括空格。 可能这些网站正在使用一些转换,如trim()或stripslashes()。 只有在字符串准确的情况下,md5才会返回相同的值。
答案 3 :(得分:-1)
md5是md5。这里的所有都是它的。如果你从不同的(非错误的)实现中得到不同的哈希值,那么你就会输入不同的输入。请记住,如果输入甚至略有不同,md5将被设计为产生截然不同的输出。一个测试字符串末尾的单个空格字符(制表符,换行符......等)将完全删除您预期的哈希值,因为您输入了不同的输入。