Должен ли я действительно получать частые столкновения с bcrypt? - PullRequest
1 голос
/ 19 февраля 2012

При хешировании двух случайных строк я получаю в среднем 2 столкновения из 100 000.Ожидается ли это?

Все эти строки производят одинаковый хэш (с использованием любой соли и любого рабочего фактора):

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";
    }
}

1 Ответ

2 голосов
/ 20 февраля 2012

Неважно, PHP не очень хорошо работает со строками, имеющими нулевой байт.
Функция PHP crypt не двоично-безопасна.

...