2012-07-17 47 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

相关问题