2013-03-14 76 views
1

這樣的代碼能否生成兩個相同的哈希值? (假設時鐘被正確去)在加密變量時,PHP crypt函數能否生成兩個相同的哈希值

<?php 
$t = time(); 
$u = $_POST['username']; 
$st = $t.$u 
$salt = 'c5ac71cd162840eb7a4c2035ee132507'; 
$e = crypt($st, $salt); 
?> 
+0

你是說如果時間改變了?理論上,但它不會在實踐中。 – 2013-03-14 17:18:16

+0

@WaleedKhan這是我的問題:它能隨着時間的推移生成兩個相同的哈希值嗎?日/月/年? – impetiredome 2013-03-14 17:20:39

+0

這裏的情況是2個用戶在相同的用戶名上註冊。您可以將$ t更改爲:'$ t = time()。mt_rand();'以使這種情況減少很多。是的,隨着時間的推移它會產生相同的散列,但這需要數百萬年 – 2013-03-14 17:23:07

回答

1

由哈希的定義和pigeonhole principle,是的,任何散列產生碰撞。良好散列的一個定義性質是兩個輸入產生相同輸出的機會非常低,以至於在實踐中可以忽略不計。

話雖如此,相同的輸入將始終產生相同的輸出(另一個定義散列的質量),如果您打算使用靜態鹽作爲輸入並且相對很少更改「隨機」值,如time()(僅限於每秒鐘都在變化,這是計算中的永恆),產生碰撞的機率更高。

我不能評論這裏哈希的正確用法是什麼,因爲我不知道你想用它來做什麼。

相關問題