2012-07-17 51 views
4

只是出於好奇,真的...例如,在python,HMAC簽名和哈希直接有什麼區別?

hashlib.sha1("key" + "data").hexdigest() != hmac.new("key", "data", hashlib.sha1) 

是有我這兩個動作之間缺少一些邏輯的區別?

+3

https://en.wikipedia.org/wiki/Hmac – mouad 2012-07-17 16:25:55

+0

所以...鍵填充? – Ben 2012-07-17 16:29:57

+2

是的,第一個不安全,第二個安全 – 2012-07-17 21:25:09

回答

3

hashlib.sha1爲您提供了簡單的sha1作爲參數給出的內容「keydata」的散列(請注意,您只是串聯兩個字符串)。 hmac調用爲您提供字符串「data」的密鑰散列,使用字符串「key」作爲密鑰,sha1作爲散列函數。這兩個調用之間的根本區別在於,只有在知道密鑰的情況下才能複製HMAC,這樣您還可以瞭解誰已生成hmac。 SHA1只能用於檢測內容沒有改變。

+0

可以說,如果你沒有訪問密鑰,你會有一段艱難的時間(假設安全的散列函數等)生成相同的摘要...基本上,@mouad上面給了我自己的工作指南,答案是關鍵填充。我想接受答案,但我可能必須自己回答。 – Ben 2012-07-17 22:09:01

+0

@Ben:https://en.wikipedia.org/wiki/Hmac#Design_principles解釋了你最初想法不好的一些原因。但基本規則非常簡單:永遠不要發明自己的密碼學。 – Nemo 2012-07-18 00:29:58

+0

@Nemo,我希望我從來沒有暗示過我打算創造我自己的加密,也不是我的問題是「更好」「做任何事情」的「一個想法」。由於我的無法理解的好奇心,我在問是什麼讓HMAC與連接和哈希不同。 – Ben 2012-07-18 13:43:43

相關問題