В этом вопросе:
Может ли кто-нибудь объяснить, как BCrypt проверяет хэш?
Ян Бойд пишет в конце своего ответа:
Вооружившись этими знаниями, теперь вы можете проверить пароль 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
Я получаю одинаковый результат на двух разных системах (одна CentOS работает под управлением eksblowfish 0.009, а другая 64-разрядная Win7 работает под управлением eksblowfish 0.007, обе работают под управлением Perl 5.8.8).
Я учусь, делая, поэтому я надеюсь понять, почему это не работает для меня.
bcrypt($password, $hash)
- person Wug   schedule 25.07.2012$2a$12$mACnM5lzNigHMaf7O1py1O
. - person Wug   schedule 25.07.2012$2a$12$mACnM5lzNigHMaf7O1py1Oblahblahblah
, он все равно вернет тот же результат$2a$12$mACnM5lzNigHMaf7O1py1O3vlf6.BA8k8x3IoJ.Tq3IB/2e7g61Km
. Ваш комментарий об атаках по словарю наводит меня на мысль, что вы думаете, что Ян мог неправильно ввести пароль в своем примере? - person haus   schedule 25.07.2012