2011-04-27 165 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

相關問題