我正在將一些現有的代碼從Python重寫到Ruby,而且我遇到了一個奇怪的錯誤,我似乎無法弄清楚。在這裏,我們有Python代碼(工作):紅寶石HMAC-SHA與Python的區別
import sha, hmac
data = 'sampledata'
data = data.encode('ascii')
des_key = hmac.new(data + "\0", "SUPERSECRET", sha).digest()[0:8]
輸出:0x64F461D377D9930C
而紅寶石(我是新來的)代碼:
require 'openssl'
digest = OpenSSL::Digest::SHA.new
data = 'sampledata'
data.encode!('ascii')
puts OpenSSL::HMAC.hexdigest(digest, "SUPERSECRET", data + "\0")[0, 16]
輸出:0x563FDAF11E63277C
什麼可能導致這種差異?
酷 - 那麼哪個版本的SHA是ruby的默認SHA算法?哪一個是python的? Python中的默認版本沒有返回與sha1算法相同的值。 – 2012-07-22 09:43:34
Python中的缺省摘要是md5(如果'new()'函數中沒有指定摘要)。 – Tisho 2012-07-22 09:53:00
謝謝 - 但我的意思是,當Lander寫出des_key = hmac.new(data +「\ 0」,「SUPERSECRET」,sha).digest()[0:8]時,他得到的結果與任何al algo ...那他得到了哪個沙(我猜不是md5)。 – 2012-07-22 10:01:09