2012-07-25 64 views
0

在这个问题:验证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)。

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

+0

这个散列应该是盐吗?如:bcrypt($ password,$ hash)' – Wug 2012-07-25 16:52:58

+0

我假设它是一种盐,它只会以盐的形式呈现(没有$ 2a $ 12 $标识符+工作因子),但也许这是关键我的误解?提出一个散列,bcrypt应该能够提取盐(这是它如何验证,对吧?)。 – haus 2012-07-25 17:02:32

+0

盐是最后$后的前22个字符。尝试对$ 2a $ 12 $ mACnM5lzNigHMaf7O1py1O'进行加密。 – Wug 2012-07-25 17:13:58

回答

2

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

我选了一个真正的散列;但不想泄露密码,我将其更改为参考XKCD

我应该采取额外的时间来产生实际的哈希correctbatteryhorsestapler

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

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


你可能想看看一些实际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'), 
('[email protected]#$%^&*()  [email protected]#$%^&*()PNBFRD', '$2a$06$fPIsBO8qRqkjj273rfaOI.', '$2a$06$fPIsBO8qRqkjj273rfaOI.HtSV9jLDpTbZn782DC6/t7qT67P6FfO'), 
('[email protected]#$%^&*()  [email protected]#$%^&*()PNBFRD', '$2a$08$Eq2r4G/76Wv39MzSX262hu', '$2a$08$Eq2r4G/76Wv39MzSX262huzPz612MZiYHVUJe/OcOql2jo4.9UxTW'), 
('[email protected]#$%^&*()  [email protected]#$%^&*()PNBFRD', '$2a$10$LgfYWkbzEvQ4JakH7rOvHe', '$2a$10$LgfYWkbzEvQ4JakH7rOvHe0y8pHKF9OaFgwUZ2q7W2FFZmZzJYlfS'), 
('[email protected]#$%^&*()  [email protected]#$%^&*()PNBFRD', '$2a$12$WApznUOJfkEGSmYRfnkrPO', '$2a$12$WApznUOJfkEGSmYRfnkrPOr466oFDCaj4b6HY3EXGvfxm43seyhgC') 

也有测试,确保它不会对Unicode字符失败。有在地方的实施给予UTF-8时坠毁的错误:

  • 密码:ππππππππ希腊小字母pi(U + 03C0),八个重复

对于其中实际哈希值为:

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

谢谢伊恩,我感谢后续。 – haus 2012-10-09 16:46:41