只是出於好奇,真的...例如,在python,HMAC簽名和哈希直接有什麼區別?
hashlib.sha1("key" + "data").hexdigest() != hmac.new("key", "data", hashlib.sha1)
是有我這兩個動作之間缺少一些邏輯的區別?
只是出於好奇,真的...例如,在python,HMAC簽名和哈希直接有什麼區別?
hashlib.sha1("key" + "data").hexdigest() != hmac.new("key", "data", hashlib.sha1)
是有我這兩個動作之間缺少一些邏輯的區別?
hashlib.sha1爲您提供了簡單的sha1作爲參數給出的內容「keydata」的散列(請注意,您只是串聯兩個字符串)。 hmac調用爲您提供字符串「data」的密鑰散列,使用字符串「key」作爲密鑰,sha1作爲散列函數。這兩個調用之間的根本區別在於,只有在知道密鑰的情況下才能複製HMAC,這樣您還可以瞭解誰已生成hmac。 SHA1只能用於檢測內容沒有改變。
可以說,如果你沒有訪問密鑰,你會有一段艱難的時間(假設安全的散列函數等)生成相同的摘要...基本上,@mouad上面給了我自己的工作指南,答案是關鍵填充。我想接受答案,但我可能必須自己回答。 – Ben 2012-07-17 22:09:01
@Ben:https://en.wikipedia.org/wiki/Hmac#Design_principles解釋了你最初想法不好的一些原因。但基本規則非常簡單:永遠不要發明自己的密碼學。 – Nemo 2012-07-18 00:29:58
@Nemo,我希望我從來沒有暗示過我打算創造我自己的加密,也不是我的問題是「更好」「做任何事情」的「一個想法」。由於我的無法理解的好奇心,我在問是什麼讓HMAC與連接和哈希不同。 – Ben 2012-07-18 13:43:43
https://en.wikipedia.org/wiki/Hmac – mouad 2012-07-17 16:25:55
所以...鍵填充? – Ben 2012-07-17 16:29:57
是的,第一個不安全,第二個安全 – 2012-07-17 21:25:09