Digest :: SHA2.hexdigest从相同的参数生成两个完全不同的值

时间:2011-04-27 18:50:31

标签: ruby

这是我见过的最奇怪的事情之一。我正在维护的一些遗留代码会生成摘要:

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

我用“hello”和“world”作为参数调用该方法,我得到了这个:

15ea8ac62708f3810b720b25dd6febe9d0ddc1ed

但如果我直接这样做:

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

我明白了:

c95b3d8968d8044c42ff650ade81315ab9adf120e2b62a637e64fa362cb828dd

请原谅我的法语,但是WTF?!

我应该寻找Digest::SHA2的某种设置吗?什么可能引发差异?

1 个答案:

答案 0 :(得分: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,或者您已经在代码中进行了更改但仍未使用旧/缓存代码。