1
ランダムな文字列を2つハッシュすると、100,000のうち2つの衝突が平均して発生します。 これは予想されますか?私は実際にbcryptと頻繁に衝突するべきですか?
base64_decode('/g=');
base64_decode('/gB/==');
base64_decode('/gBQyVY/0dzg');
base64_decode('/gBQyoK71jVY/JZP0dzg=');
base64_decode('/gBQyoK71jVY/J2ea4q9mAZP0dzg==');
base64_decode('/gBQyoK71jVY/J7QuBNJuFdxyf2eTBCs42chkx6ZvpJYszpUcJk8/HXa4q9mAZP0dzg=');
そして、中心から文字を追加したり削除してみてください、あなたはより多くの試合を得るこれらは単なる例です:
これらの文字列のすべて
は、(任意の塩および任意の作業係数を使用して)同じハッシュを生成します。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";
}
}
これらの衝突は、私が信じるbcryptのopenwallの実装を使用しているPHPに固有のものです。 jBCryptは、何らかの理由でこのデータに対して異なるハッシュを生成します(phpと異なり、お互いに異なります)。 – Roman
この文字列はphpとjavaのbcryptによって別々にコード化されています: "þ" – Roman
塩が正しい方法でコード化されていることを確認してください - PHPは '[./0-9A-Za-z]'に22桁の数字を入れます25桁を通過しています。これが原因である可能性はありますか? –