2012-06-15 72 views
1

我曾經使用過此頁不見了......最短的哈希值

http://www.php.net/manual/en/function.hash.php

MD5長32個字符,而SHA-1是40 對於例如

$str = 'apple'; 

sha1 string d0be2dc421be4fcd0172e5afceea3970e2f3d940 
md5 string 1f3870be274f6c49b3e31a0c6728957f 

即使可選raw_output設置爲TRUE,那麼MD5摘要,而不是用16

的長度我要尋找,將創建的哈希將在函數返回原始的二進制格式等於或少於8個字符。

更新: 我需要3個原因,較小的字符串:

1)MySQL的歸檔表格類型似乎並沒有允許在具有超過8個字符

2)我打算一列的索引使用像redis這樣喜歡小鍵的鍵值工具

3)安全性在這裏不是問題。我散列列,如「國+電信+運營商」

+2

那麼要麼你需要許多位(許多信息),或者你不需要。如果後者是這種情況,那麼爲什麼不將截短的字符串截斷爲所需的長度?只要你總是以同樣的方式做,結果也應該是相同的(對於相同的輸入)。但請記住,較少的位會導致較高的碰撞概率。 – Nobody

+0

你需要什麼?我幾乎不假設你想要生成臨時密碼,但請記住,哈希只包含16個不同的字符。這對於密碼更少。 – KingCrunch

+0

你應該添加更多的解釋爲什麼你想創建一個只有8個字符的散列。這是非常脆弱的。我擔心你可能會犯下一個很大的錯誤,它會跟隨你,並從你的內心詛咒你的項目。 – Whisperity

回答

2

可以使用crc32方法來創建哈希,它創建了一個8個字符長的哈希值。

$hash = hash('crc32', $input, FALSE); 

非常謹慎使用此方法,因爲它是完全暴露在加密攻擊。 不是用它來做任何類型的安全檢查。

+0

如果他出於安全目的使用它,這是一個不好的建議... –

+0

事實確實如此。感謝您指出我忘記在答案中添加通知。我希望提問者可以在他/她希望使用該方法的更多細節上修改他/她的問題。 – Whisperity

-1
function short_hash($value, $length=8) { 
    return substr(md5($value), 0, $length); 
} 
0

對我來說,我建議你創建自己的自定義「加密」算法,爲你生成8個字符。你甚至可以決定做一個md5,SHA1和SHA512,並以2:3:3的比例組合來獲得你自己的自定義代碼。