【问题标题】:Digest::SHA2.hexdigest generates two completely different values from same parametersDigest::SHA2.hexdigest 从相同的参数生成两个完全不同的值
【发布时间】:2011-04-27 18:50:30
【问题描述】:

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

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 的某种设置吗?什么可能引发这种差异?

【问题讨论】:

  • 我刚刚尝试了Digest::SHA1.hexdigest,结果与上面的encrypt 方法相同......现在问题是为什么!?

标签: ruby


【解决方案1】:

我认为您的第一个代码实际上是:

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,或者您已经对代码进行了更改,但是仍在使用旧的/缓存的代码而没有意识到。

【讨论】:

  • 是的,我刚刚搜索了所有代码,果然,还有另一个不那么明显的部分重新定义了方法......应该早点想到这一点。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-28
  • 1970-01-01
  • 2014-04-01
相关资源
最近更新 更多