在這個問題:驗證bcrypt散列?
Can someone explain how BCrypt verifies a hash?
伊恩·博伊德寫道,在他的回答中結束:
有了這些知識,你現在可以驗證密碼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腳本(爲什麼它不」 t正確驗證密碼)?如果我用我的系統生成散列,我得到一個匹配:
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
我得到兩個不同的系統相同的結果(一個CentOS的運行eksblowfish 0.009和其他的Win7 64位運行eksblowfish 0.007,兩者運行Perl 5.8.8)。
我在做的學習,所以我希望理解爲什麼這不適合我。
這個散列應該是鹽嗎?如:bcrypt($ password,$ hash)' – Wug 2012-07-25 16:52:58
我假設它是一種鹽,它只會以鹽的形式呈現(沒有$ 2a $ 12 $標識符+工作因子),但也許這是關鍵我的誤解?提出一個散列,bcrypt應該能夠提取鹽(這是它如何驗證,對吧?)。 – haus 2012-07-25 17:02:32
鹽是最後$後的前22個字符。嘗試對$ 2a $ 12 $ mACnM5lzNigHMaf7O1py1O'進行加密。 – Wug 2012-07-25 17:13:58