2013-08-23 141 views
2

這讓我發瘋,我的md5不同意。我有這個字符串:不同意同一個字符串的md5哈希,例如

組合生成器是一個工具,讓您可以輕鬆地通過選擇相關屬性創建 一系列的組合。對於 示例,如果您銷售三種不同尺寸的T恤和兩種不同顏色的T恤,則生成器將爲您創建六種組合。

當我散列它使用MD5函數(PHP 5.5.0)在我的電腦上它產生以下散列:422f3f656e1a5f95e8b5cf7565d815b5

http://www.miraclesalad.com/webtools/md5.php同意我的電腦的結果。

http://www.md5.cz/不同意我的電腦和奇蹟。

該字符串/ 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恤和兩種不同顏色的T恤,則生成器將爲您創建六種組合。

422f3f656e1a5f95e8b5cf7565d815b5

422f3f656e1a5f95e8b5cf7565d815b5

422f3f656e1a5f95e8b5cf7565d815b5

所以它不是關於UTF8。

任何想法發生了什麼?

+0

這兩頁的輸入有區別。一個是單行,另一個是文本塊。一個字符'a'散列相同。這種差異可能是由於某些空白區別,例如換行符。您在OP中提供的輸入已格式化爲SO,因此我們無法確切知道您在做什麼... –

回答

5

我最好的猜測是它與'你'這個詞中的'標記'和字符編碼有關。如果您刪除該報價,則兩個網站都會報告相同的md5。

+0

什麼?那就對了。這有點令人震驚。也許其中一個網站正在逃避錯誤。 – vroomfondel

+0

任何想法如何解決它?在我的機器上,我的意思是,我不在乎這兩個網站是否不同意。我需要獲得相同的結果md5.cz – djfm

+2

我傻,http://www.md5.cz/逃逸單引號!就那麼簡單。 – djfm

-1

md5是md5。這裏的所有都是它的。如果你從不同的(非bug)實現中獲得不同的哈希值,那麼你正在輸入不同的輸入。請記住,如果輸入數據略有不同,md5將被設計爲產生大量不同的輸出。一個測試字符串末尾的單個空白字符(製表符,換行符等)會完全垃圾你的預期散列,因爲你已經輸入了不同的輸入。

0

我試着向上面提到的字符串遞增地添加到您在問題中鏈接到的兩個站點,結果發現,在md5.cz中打破生成器的字符是撇號,如果您銷售的是T恤衫。

如果你把它輸送到一個散列器,可能保留字符串的使用獨特的東西一樣進行urlencode(前剝離的特殊字符的字符串),你應該得到的任何字符串匹配的哈希值。

0

中的字符串必須完全一致,包括空格。 可能這些網站正在使用trim()或stripslashes()等轉換。 只有字符串是精確的,md5纔會返回相同的值。