この質問では:
BCrypt がハッシュを検証する方法を誰か説明できますか?
Ian Boyd は、回答の最後に次のように書いています。
この知識を武器に、保存されたハッシュに対してパスワードを検証できるようにcorrectbatteryhorsestapler
なりました: $2a$12$mACnM5lzNigHMaf7O1py1OLCBgGL4tYUF0N/4rS9CwDsI7ytwL4D6
次の Perl プログラムを使用して、このハッシュを検証しようとしています。
use Crypt::Eksblowfish::Bcrypt qw(bcrypt);
my $password = "correctbatteryhorsestapler";
my $hash = '$2a$12$mACnM5lzNigHMaf7O1py1OLCBgGL4tYUF0N/4rS9CwDsI7ytwL4D6';
print "Verifying password $password<br>with hash $hash<BR><BR>";
my $new_hash = bcrypt($password,$hash);
print "<pre>Original hash: " . $hash . "<br>" . "New hash: " . $new_hash . "</pre><br>";
if ($hash ne $new_hash) {
print "No match.";
}
私のプログラムの出力は次のとおりです。
Verifying password correctbatteryhorsestapler
with hash $2a$12$mACnM5lzNigHMaf7O1py1OLCBgGL4tYUF0N/4rS9CwDsI7ytwL4D6
Original hash: $2a$12$mACnM5lzNigHMaf7O1py1OLCBgGL4tYUF0N/4rS9CwDsI7ytwL4D6
New hash: $2a$12$mACnM5lzNigHMaf7O1py1O3vlf6.BA8k8x3IoJ.Tq3IB/2e7g61Km
No match.
上記の情報に基づいて、Perl スクリプトで何が間違っているのか (なぜパスワードが正しく検証されないのか) 教えてくれる人がいるだろうか? システムが生成したハッシュを使用すると、一致が得られます。
Verifying password correctbatteryhorsestapler
with hash $2a$12$mACnM5lzNigHMaf7O1py1O3vlf6.BA8k8x3IoJ.Tq3IB/2e7g61Km
Original hash: $2a$12$mACnM5lzNigHMaf7O1py1O3vlf6.BA8k8x3IoJ.Tq3IB/2e7g61Km
New hash: $2a$12$mACnM5lzNigHMaf7O1py1O3vlf6.BA8k8x3IoJ.Tq3IB/2e7g61Km
2 つの異なるシステム (1 つの CentOS で eksblowfish 0.009 を実行し、もう 1 つの Win7 64 ビットで eksblowfish 0.007 を実行し、両方とも Perl 5.8.8 を実行) で同じ結果が得られます。
私はやって学ぶので、これがうまくいかない理由を理解したいと思っています。