2012-03-28 120 views
0

我使用的+号加起来2 MD5哈希像这样:PHP加起来MD5散列?

md5('string1') + md5('string2') 
现在

,如果我这样做用绳子,就像这样:

'string1' + 'string2' 

... PHPP会给我0作为返回值。但是,对于MD5散列,它总是返回一个数字值,对此我无法确定任何来源。

回答

5

它将取决于您的字符串生成的哈希值。当添加“字符串”值时,PHP的行为(并且它是well documented)是取任何前导数字字符并将它们视为整数...如果没有前导数字,则将其视为0.

所以

"1st String" + "2nd String" => 1 + 2 => 3 

与您的数据

md5('string1') = '34b577be20fbc15477aadb9a08101ff9' 
md5('string2') = '91c0c59c8f6fc9aa2dc99a89f2fd0ab5' 

34 + 91 => 125 

现在你为什么要尝试添加散列值?

-1

PHP+是数字加法,.是字符串连接。

此外,md5(string)回报 ...

所以:

$hashes = md5('string1') . md5('string2'); 

编辑:不明白为什么会downvote这个buuut,你可能想numericaly添加散列。然后,您需要将md5结果转换为数字hexdec()

+0

不是我的downvote,但'hexdec'显然不会在这里工作,因为MD5是128位,这意味着它会转换为浮点数,这意味着你会失去精度,这意味着结果不会是准确。 – Jon 2012-03-28 08:05:03

+0

如果我正确解释OP的问题,他不会问如何连接两个MD5哈希值。他问为什么'+'操作符在与字符串一起使用时通常返回零,为此返回一个非零整数。 – JJJ 2012-03-28 08:08:00

0

不能像+那样添加任何其他种类的字符串,但不能使用+添加md5哈希。由于PHP的rules for string to number conversion,预计会有所不同。进行对比:

'1string' + '2string' 

'string1' + 'string2' 

如果数字增加md5s为您提供了从零不同的结果,这是因为偶然特定的哈希你与一个或多个十进制数字将开始。

可能没有合理的理由添加两个不代表十进制数字的字符串,所以不要这样做。

1

只需添加,md5函数返回字符串值,但md5算法会生成十六进制值。

还记得PHP支持一些自动投射。

这就是为什么php会给出一些值,但你无法检测到该值,因为即使字符串中的单个字符改变完全改变生成的MD5哈希。

仍然问题是非常有趣的。你可以让我们知道你想通过添加MD5散列实现什么?

+0

+1信息,不知道md5创建hexa ...关于我们为什么这么做 - 这基本上是我们用+代替的一种错误。然后发现我们得到了更奇怪的结果:-) – 2012-03-28 08:54:45