1
當散列兩個隨機字符串時,我平均得到100,000箇中的兩個衝突。 這是預期的嗎?我真的應該與bcrypt頻繁碰撞嗎?
所有這些字符串產生相同的哈希值(使用任何鹽和任何工作因子):
base64_decode('/g=');
base64_decode('/gB/==');
base64_decode('/gBQyVY/0dzg');
base64_decode('/gBQyoK71jVY/JZP0dzg=');
base64_decode('/gBQyoK71jVY/J2ea4q9mAZP0dzg==');
base64_decode('/gBQyoK71jVY/J7QuBNJuFdxyf2eTBCs42chkx6ZvpJYszpUcJk8/HXa4q9mAZP0dzg=');
而這些只是例子,嘗試從中心添加和刪除角色,你會得到更多的比賽。 這裏是用來尋找他們的PHP代碼:
set_time_limit(60*10);
$salt = '$2a$04$usesomesillystringforsalt$';
for($i=0; $i < 100000; $i++){
$one = openssl_random_pseudo_bytes(rand(1,111));
$two = openssl_random_pseudo_bytes(rand(1,111));
if(crypt($one, $salt)==crypt($two, $salt)){
echo base64_encode($one).'|'.base64_encode($two)."\n";
}
}
這些碰撞是特定於php,我使用bcrypt的openwall實現。由於某種原因,jBCrypt爲這些數據生成不同的哈希值(與php不同並且彼此不同)。 – Roman 2012-02-19 10:02:06
這個字符串在php和java中被bcrypt編碼的方式不同:「þ」 – Roman 2012-02-19 10:31:29
確保鹽以正確的方式編碼 - PHP在'[./0-9A-Za-z]'中需要22位數字,而你傳遞25位數字。難道這是原因嗎? – 2012-02-19 12:11:28