1
這樣的代碼能否生成兩個相同的哈希值? (假設時鐘被正確去)在加密變量時,PHP crypt函數能否生成兩個相同的哈希值
<?php
$t = time();
$u = $_POST['username'];
$st = $t.$u
$salt = 'c5ac71cd162840eb7a4c2035ee132507';
$e = crypt($st, $salt);
?>
這樣的代碼能否生成兩個相同的哈希值? (假設時鐘被正確去)在加密變量時,PHP crypt函數能否生成兩個相同的哈希值
<?php
$t = time();
$u = $_POST['username'];
$st = $t.$u
$salt = 'c5ac71cd162840eb7a4c2035ee132507';
$e = crypt($st, $salt);
?>
由哈希的定義和pigeonhole principle,是的,任何散列產生碰撞。良好散列的一個定義性質是兩個輸入產生相同輸出的機會非常低,以至於在實踐中可以忽略不計。
話雖如此,相同的輸入將始終產生相同的輸出(另一個定義散列的質量),如果您打算使用靜態鹽作爲輸入並且相對很少更改「隨機」值,如time()
(僅限於每秒鐘都在變化,這是計算中的永恆),產生碰撞的機率更高。
我不能評論這裏哈希的正確用法是什麼,因爲我不知道你想用它來做什麼。
你是說如果時間改變了?理論上,但它不會在實踐中。 – 2013-03-14 17:18:16
@WaleedKhan這是我的問題:它能隨着時間的推移生成兩個相同的哈希值嗎?日/月/年? – impetiredome 2013-03-14 17:20:39
這裏的情況是2個用戶在相同的用戶名上註冊。您可以將$ t更改爲:'$ t = time()。mt_rand();'以使這種情況減少很多。是的,隨着時間的推移它會產生相同的散列,但這需要數百萬年 – 2013-03-14 17:23:07