2011-04-27 61 views
1

这是我见过的最奇怪的之一。这里也有一些旧的代码,我坚持认为生成摘要:Digest :: SHA2.hexdigest从相同的参数生成两个完全不同的值

require 'digest/sha1' 
def encrypt(password, salt) 
    Digest::SHA2.hexdigest("--#{salt}--#{password}--") 
end 

我称之为有“你好”这种方法与“世界”作为参数,我得到这个:

15ea8ac62708f3810b720b25dd6febe9d0ddc1ed 

但是,如果我直接做到这一点:

Digest::SHA2.hexdigest("--world--hello--") 

我得到:

c95b3d8968d8044c42ff650ade81315ab9adf120e2b62a637e64fa362cb828dd 

请原谅我的法语,但跆拳道?!

请问有什么设置,我应该找?什么可能引发差距?

+0

我刚刚尝试过'Digest :: SHA1.hexdigest',它的吐出方式与上面的'encrypt'方法一样......现在问题就是为什么!? – Ivan 2011-04-27 18:56:02

回答

26

我想你的第一个代码居然是:

def encrypt(password, salt) 
    Digest::SHA1.hexdigest("--#{salt}--#{password}--") 
end 

...因为:

irb> Digest::SHA1.hexdigest '--world--hello--' 
#=> "15ea8ac62708f3810b720b25dd6febe9d0ddc1ed" 
irb> Digest::SHA2.hexdigest '--world--hello--' 
#=> "c95b3d8968d8044c42ff650ade81315ab9adf120e2b62a637e64fa362cb828dd" 

因此,也许你把你的问题的代码是不是,实际上是在应用程序代码,或者其他人以完全相同的方式重新定义encrypt,但使用SHA1,或者您已对代码进行了更改,但仍未使用旧/高速缓存代码。

+0

是的,我刚刚搜索了所有的代码,果然,还有另一个不太明显的部分,该方法被重新定义...应该早点想到。谢谢。 – Ivan 2011-04-27 19:05:07

+4

+1优秀的直觉。 – steenslag 2011-04-27 21:40:47

+2

+1为一个美丽的头脑。 – 2014-02-10 22:08:37

相关问题