验证bcrypt哈希? [英] Verifying a bcrypt hash?

查看:152
本文介绍了验证bcrypt哈希?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在这个问题中:

有人可以解释BCrypt如何验证散列吗?



Ian Boyd在他的回答结尾写道:

掌握了这些知识后,您现在可以针对保存的散列验证密码 correctbatteryhorsestapler
$ 2a $ 12 $ mACnM5lzNigHMaf7O1py1OLCBgGL4tYUF0N / 4rS9CwDsI7ytwL4D6



<$>我使用下面的Perl程序来试图验证这个哈希:

 使用Crypt :: Eksblowfish :: Bcrypt qw(bcrypt); 
my $ password =correctbatteryhorsestapler;
my $ hash ='$ 2a $ 12 $ mACnM5lzNigHMaf7O1py1OLCBgGL4tYUF0N / 4rS9CwDsI7ytwL4D6';

print使用散列$ hash< BR>< BR>验证密码$ password< br>;

my $ new_hash = bcrypt($ password,$ hash);

print< pre> Original hash:。 $哈希。 <峰; br> 中。 新的哈希:。 $ new_hash。 < /预><峰; br> 中;

if($ hash ne $ new_hash){
printNo match。;
}

我的程式输出如下:

 验证密码correctbatteryhorsestapler 
with hash $ 2a $ 12 $ mACnM5lzNigHMaf7O1py1OLCBgGL4tYUF0N / 4rS9CwDsI7ytwL4D6

原始哈希值:$ 2a $ 12 $ mACnM5lzNigHMaf7O1py1OLCBgGL4tYUF0N / 4rS9CwDsI7ytwL4D6
新哈希值:$ 2a $ 12 $ mACnM5lzNigHMaf7O1py1O3vlf6.BA8k8x3IoJ.Tq3IB / 2e7g61Km


无匹配。

我想知道,根据上面的信息,任何人都可以告诉我我做错了什么Perl脚本(为什么它没有正确验证密码)?如果我使用我的系统生成的哈希值,我会得到一个匹配:

 验证密码correctbatteryhorsestapler 
with hash $ 2a $ 12 $ mACnM5lzNigHMaf7O1py1O3vlf6.BA8k8x3IoJ.Tq3IB / 2e7g61Km

原始哈希:$ 2A $ 12 $ mACnM5lzNigHMaf7O1py1O3vlf6.BA8k8x3IoJ.Tq3IB / 2e7g61Km
新的哈希:$ 2A $ 12 $ mACnM5lzNigHMaf7O1py1O3vlf6.BA8k8x3IoJ.Tq3IB / 2e7g61Km

我在两个不同的系统上得到相同的结果(一个CentOS运行eksblowfish 0.009,另一个Win7 64位运行eksblowfish 0.007,都运行Perl 5.8.8)。



我通过做的学习,所以我希望理解为什么这不适合我。

解决方案

答案是这是我的错。我在 correctbatteryhorsestapler 这个问题上给了你一个错误的散列。

我选择了一个真正的散列;但不想泄露密码,我将其更改为对 XKCD 的引用。



我应该花费额外的时间为 correctbatteryhorsestapler 生成一个实际的散列:

 $ 2a $ 12 $ mACnM5lzNigHMaf7O1py1O3vlf6.BA8k8x3IoJ.Tq3IB / 2e7g61Km 

我的错为混乱。在原始问题中,我的意思是现在你已经准备好进入这个世界了,它并不是真正的测试向量。






您可能需要查看一些实际的已知测试向量

 ('','$ 2a $ 06 $ DCq7YPn5Rq63x1Lad4cll。 ' '$ 2A $ 06 $ DCq7YPn5Rq63x1Lad4cll.TV4S6ytwfsfvkgY8jIucDrjc8deX1s。'),
(' ' '$ 2A $ 08 $ HqWuK6 / Ng6sg9gQzbLrgb。',' $ 2A $ 08 $ HqWuK6 / Ng6sg9gQzbLrgb.Tl.ZHfXLhvt / SgVyWhQqgqcZ7ZuUtye '),
(', '$ 2A $ 10 $ k1wbIrmNyFAPwPVPSVa /泽', '$ 2A $ 10 $ k1wbIrmNyFAPwPVPSVa / zecw2BCEnBwVS2GbrmgzxFUOqW9dk4TCW'),
( '', '$ 2A $ 12 $ k42ZFHFWqBp3vWli.nIn8u' ,'$ 2a $ 12 $ k42ZFHFWqBp3vWli.nIn8uYyIkbvYRvodzbfbK18SSsY.CsIQPlxO'),
( '一个', '$ 2A $ 06 $ m0CrhHm10qJ3lXRY.5zDGO', '$ 2A $ 06 $ m0CrhHm10qJ3lXRY.5zDGO3rS2KdeeWLuGmsfGlMfOxih58VYVfxe'),
( '一个', '$ 2A $ 08 $ cfcvVd2aQ8CMvoMpP2EBfe',$ 2A $ 08 $ cfcvVd2aQ8CMvoMpP2EBfeodLEkkFJ9umNEfPD18。 $ b $'('a','$ 2a $ 10 $ k87L / MF28Q673VKh8 / cPi。','$ 2a $ 10 $ k87L / MF28Q673VKh8 / cPi.SU17MU / rWuSiIDDFayrKk / 1tBsSQu4u'),
( '一个', '$ 2A $ 12 $ 8NJH3LsPrANStV6XtBakCe', '$ 2A $ 12 $ 8NJH3LsPrANStV6XtBakCez0cKHXVxmvxIlcz785vxAIZrihHZpeS'),
( 'ABC', '$ 2A $ 06 $ If6bvum7DFjUnE9p2uDeDu',$ 2A $ 06 $ If6bvum7DFjUnE9p2uDeDu0YHzrHM6tf.iqN8。
('abc','$ 2a $ 08 $ Ro0CUfOqk6cXEKf3dyaM7O','$ 2a $ 08 $ Ro0CUfOqk6cXEKf3dyaM7OhSCvnwM9s4wIX9JeLapehKK5YdLxKcm'),
('abc','$ 2a $ 10 $ WvvT PHKwdBJ3uk0Z37EMR。 ' '$ 2A $ 10 $ WvvTPHKwdBJ3uk0Z37EMR.hLA2W6N9AEBhEgrAOljy2Ae5MtaSIUi'),
(' ABC, '$ 2A $ 12 $ EXRkfkdmXn2gzds2SSitu。', '$ 2A $ 12 $ EXRkfkdmXn2gzds2SSitu.MW9.gAVqa9eLS1 // RYtYCmB1eLHg.9q') ,
( 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', '$ 2A $ 06 $ .rCVZVOThsIa97pEDOxvGu', '$ 2A $ 06 $ .rCVZVOThsIa97pEDOxvGuRRgzG64bvtJ0938xuqzv18d3ZpQhstC'),
( 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', '$ 2A $ 08 $ aTsUwsyowQuzRrDqFflhge',$ 2A $ 08 $ aTsUwsyowQuzRrDqFflhgekJ8d9 / 7Z3GV3UcgvzQW3J5zMyrTvlz。 '),
(' ABCDEFGHIJKLMNOPQRSTUVWXYZ, '$ 2A $ 10 $ fVH8e28OQRj9tqiDXs1e1u', '$ 2A $ 10 $ fVH8e28OQRj9tqiDXs1e1uxpsjN0c7II7YPKXua2NAKYvM6iQk7dq'),
( 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', '$ 2A $ 12 $ D4G5f18o7aMMfwasBL7Gpu' ,'$ 2a $ 12 $ D4G5f18o7aMMfwasBL7GpuQWuP3pkrZrOAnqP.bmezbMng.QwJ / pG'),
('〜!@#$%^& *()〜!@#$%^& *()PNBFRD',' $ 2a $ 06 $ fPIsBO8qRqkjj273rfaOI。','$ 2a $ 06 $ fPIsBO8qRqkjj2 ),$ 2a $ 08 $ Eq2r4G / 76Wv39MzSX262hu',
,'$ 2a $ 08 $ Eq2r4G / 76Wv39MzSX262huzPz612MZiYHVUJe / OcOql2jo4.9UxTW'),
('〜!@#$%^& *()〜!@#$%^& *()PNBFRD',' $ 2a $ 10 $ LgfYWkbzEvQ4JakH7rOvHe','$ 2a $ 10 $ LgfYWkbzEvQ4JakH7rOvHe0y8pHKF9OaFgwUZ2q7W2FFZmZzJYlfS'),
('〜!@#$%^& *()〜!@#$%^& *()PNBFRD',' $ 2a $ 12 $ WApznUOJfkEGSmYRfnkrPO','$ 2a $ 12 $ WApznUOJfkEGSmYRfnkrPOr466oFDCaj4b6HY3EXGvfxm43seyhgC')

还有一些测试确保它在Unicode字符上不会失败。在给定UTF-8的情况下,某个实现中存在一个错误: 密码: ππππππππ 希腊小写字母Pi(U + 03C0),八次重复


  $ 2a $ 10 $ .TtQJ4Jr6isd4Hp.mVfZeuh6Gws4rOQ / vdBczhDx.19NFK0Y84Dle 


In this question:

Can someone explain how BCrypt verifies a hash?

Ian Boyd writes at the end of his answer:

Armed with this knowledge, you can now verify a password correctbatteryhorsestapler against the saved hash: $2a$12$mACnM5lzNigHMaf7O1py1OLCBgGL4tYUF0N/4rS9CwDsI7ytwL4D6

I am using the following Perl program to attempt to verify this hash:

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

The output of my program is as follows:

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.

I wonder if, based on the information above, anyone can tell me what I am doing wrong with my Perl script (why it doesn't correctly validate the password)? If I use the hash my system generates, I do get a match:

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

I get the same result on two different systems (one CentOS running eksblowfish 0.009 and the other Win7 64-bit running eksblowfish 0.007, both running Perl 5.8.8).

I learn by doing, so I am hoping to understand why this isn't working for me.

解决方案

The answer is that it's my fault. i gave you the wrong hash in the question for correctbatteryhorsestapler.

i picked a real hash; but not wanting to give away the password i changed it to a reference to XKCD.

i should have taken the extra moments to generate an actual hash for correctbatteryhorsestapler:

$2a$12$mACnM5lzNigHMaf7O1py1O3vlf6.BA8k8x3IoJ.Tq3IB/2e7g61Km

My fault for the confusion. In the original question i meant it as now you are ready to go out into the world, it wasn't meant to be an actual test vector.


You might want to look at some actual known test vectors:

('',                                   '$2a$06$DCq7YPn5Rq63x1Lad4cll.',    '$2a$06$DCq7YPn5Rq63x1Lad4cll.TV4S6ytwfsfvkgY8jIucDrjc8deX1s.'),
('',                                   '$2a$08$HqWuK6/Ng6sg9gQzbLrgb.',    '$2a$08$HqWuK6/Ng6sg9gQzbLrgb.Tl.ZHfXLhvt/SgVyWhQqgqcZ7ZuUtye'),
('',                                   '$2a$10$k1wbIrmNyFAPwPVPSVa/ze',    '$2a$10$k1wbIrmNyFAPwPVPSVa/zecw2BCEnBwVS2GbrmgzxFUOqW9dk4TCW'),
('',                                   '$2a$12$k42ZFHFWqBp3vWli.nIn8u',    '$2a$12$k42ZFHFWqBp3vWli.nIn8uYyIkbvYRvodzbfbK18SSsY.CsIQPlxO'),
('a',                                  '$2a$06$m0CrhHm10qJ3lXRY.5zDGO',    '$2a$06$m0CrhHm10qJ3lXRY.5zDGO3rS2KdeeWLuGmsfGlMfOxih58VYVfxe'),
('a',                                  '$2a$08$cfcvVd2aQ8CMvoMpP2EBfe',    '$2a$08$cfcvVd2aQ8CMvoMpP2EBfeodLEkkFJ9umNEfPD18.hUF62qqlC/V.'),
('a',                                  '$2a$10$k87L/MF28Q673VKh8/cPi.',    '$2a$10$k87L/MF28Q673VKh8/cPi.SUl7MU/rWuSiIDDFayrKk/1tBsSQu4u'),
('a',                                  '$2a$12$8NJH3LsPrANStV6XtBakCe',    '$2a$12$8NJH3LsPrANStV6XtBakCez0cKHXVxmvxIlcz785vxAIZrihHZpeS'),
('abc',                                '$2a$06$If6bvum7DFjUnE9p2uDeDu',    '$2a$06$If6bvum7DFjUnE9p2uDeDu0YHzrHM6tf.iqN8.yx.jNN1ILEf7h0i'),
('abc',                                '$2a$08$Ro0CUfOqk6cXEKf3dyaM7O',    '$2a$08$Ro0CUfOqk6cXEKf3dyaM7OhSCvnwM9s4wIX9JeLapehKK5YdLxKcm'),
('abc',                                '$2a$10$WvvTPHKwdBJ3uk0Z37EMR.',    '$2a$10$WvvTPHKwdBJ3uk0Z37EMR.hLA2W6N9AEBhEgrAOljy2Ae5MtaSIUi'),
('abc',                                '$2a$12$EXRkfkdmXn2gzds2SSitu.',    '$2a$12$EXRkfkdmXn2gzds2SSitu.MW9.gAVqa9eLS1//RYtYCmB1eLHg.9q'),
('abcdefghijklmnopqrstuvwxyz',         '$2a$06$.rCVZVOThsIa97pEDOxvGu',    '$2a$06$.rCVZVOThsIa97pEDOxvGuRRgzG64bvtJ0938xuqzv18d3ZpQhstC'),
('abcdefghijklmnopqrstuvwxyz',         '$2a$08$aTsUwsyowQuzRrDqFflhge',    '$2a$08$aTsUwsyowQuzRrDqFflhgekJ8d9/7Z3GV3UcgvzQW3J5zMyrTvlz.'),
('abcdefghijklmnopqrstuvwxyz',         '$2a$10$fVH8e28OQRj9tqiDXs1e1u',    '$2a$10$fVH8e28OQRj9tqiDXs1e1uxpsjN0c7II7YPKXua2NAKYvM6iQk7dq'),
('abcdefghijklmnopqrstuvwxyz',         '$2a$12$D4G5f18o7aMMfwasBL7Gpu',    '$2a$12$D4G5f18o7aMMfwasBL7GpuQWuP3pkrZrOAnqP.bmezbMng.QwJ/pG'),
('~!@#$%^&*()      ~!@#$%^&*()PNBFRD', '$2a$06$fPIsBO8qRqkjj273rfaOI.',    '$2a$06$fPIsBO8qRqkjj273rfaOI.HtSV9jLDpTbZn782DC6/t7qT67P6FfO'),
('~!@#$%^&*()      ~!@#$%^&*()PNBFRD', '$2a$08$Eq2r4G/76Wv39MzSX262hu',    '$2a$08$Eq2r4G/76Wv39MzSX262huzPz612MZiYHVUJe/OcOql2jo4.9UxTW'),
('~!@#$%^&*()      ~!@#$%^&*()PNBFRD', '$2a$10$LgfYWkbzEvQ4JakH7rOvHe',    '$2a$10$LgfYWkbzEvQ4JakH7rOvHe0y8pHKF9OaFgwUZ2q7W2FFZmZzJYlfS'),
('~!@#$%^&*()      ~!@#$%^&*()PNBFRD', '$2a$12$WApznUOJfkEGSmYRfnkrPO',    '$2a$12$WApznUOJfkEGSmYRfnkrPOr466oFDCaj4b6HY3EXGvfxm43seyhgC')

There are also tests that make sure that it doesn't fail on Unicode characters. There was a bug in an implementation somewhere that crashed when given UTF-8:

  • Password: ππππππππ Greek Small Letter Pi (U+03C0), eight repetitions

For which an actual hash is:

$2a$10$.TtQJ4Jr6isd4Hp.mVfZeuh6Gws4rOQ/vdBczhDx.19NFK0Y84Dle

这篇关于验证bcrypt哈希?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆