首先来看一段HmacSHA1加密和SHA1加密的代码
#!/usr/bin/env python# -*- coding: utf-8 -*-"""Created on 1/31/18 10:03 AM@author: Chen Liang@function: HmacSHA1 vs SHA1"""import sysreload(sys)sys.setdefaultencoding('utf-8')import hashlibimport hmacdef sha1(msg): """ sha1加密 :param msg: :return: 长度40位的摘要信息 """ sha = hashlib.sha1() sha.update(msg) return sha.hexdigest()def hmac_sha1(key, msg): """ hmac sha1加密 :param key: 密钥 :param msg: 待加密音讯 :return: 长度40位的摘要信息 """ m = hmac.new(key, msg, hashlib.sha1) return m.hexdigest()print hmac_sha1('FKEwTiz9Te0FWlqkS4g8hEdqAsPZfdR4', 'me')print sha1('me')
输入后果为
1db0e9132a8dff51e3a4d47497e29a500087da9ab1c1d8736f20db3fb6c1c66bb1455ed43909f0d8
从后果中能够发现,HmacSHA1算法和SHA1算法都能够为任意长的音讯生成一个20字节(160bit)的固定大小的输入,那么他们的区别在哪儿呢?
其实答案是很简略的。
在HMAC vs. raw SHA-1这篇文章中有一个乏味的解释,翻译过去粗心如下
<!--more-->
写在后面,请不要在意具体的摘要计算结果,重点在于解释的趣味性和简洁明了
假如你想向你喜爱的人表白,你很想拿出一首漂亮的14行诗,然而最初你决定只说一句简略的"i love you"
。你要表白的信息可能完整无缺的传播给喜爱的妹子,然而你又不想其余的人晓得,那么能够理解一些对于明码哈希的常识,应用SHA-1算法从音讯中生成一个摘要。
"i love you"
对应的SHA-1摘要是:bb7b1901d99e8b26bb91d2debdb7d7f24b3158cf
你喜爱的妹子接管到音讯后,应用SHA-1算法从新计算出摘要和你发送的摘要进行比拟。如果匹配就示意音讯正确。
然而总有那么些刁民打算拦挡你的信息,而后用另一个音讯
"don't call me anymore"
代替掉,而后生成一个全新的摘要:e267e18f05cb6ea3b10b761bbac21a0f92bb8d0d
。你喜爱的妹子收到音讯之后摘要信息无奈匹配得上,都有些难以置信了。事件看起来很严厉,然而你向妹子解释了一番,保障当前再也不会产生这样相似的事件,你和妹子约定在计算hash摘要信息时在音讯后面加上文本
"our secret key."
,也就是新的残缺的信息是"our secret key.i love you"
。就这样雷同的音讯就会产生上面这样的摘要信息:
e0759e9b59bdd6d864d29ce3a502adb6257f7615
, 原文的这个值计算有错,评论中有提出。这时候如果那些刁民只是简略的替换摘要信息就不失效了。因为你妹子应用key+msg的形式失去的后果和替换之后的摘要信息匹配不上。这样只有他人不晓得你的密钥就没有方法产生虚伪的音讯。
然而还有一个问题,问题在于SHA-1和HMAC之间的区别。
SHA-1是应用迭代算法进行计算的,首先一个接一个地将音讯分成64个字节的块,而后把这些块组合在一起来产生20个字节的摘要信息。 然而,因为你的音讯能够是任意长度的,并且因为SHA通过其迭代性质在64字节的块之后持续计算块,这时候问题就呈现了。
那些刁民打算再次扭转你的信息,他们可能只是将更多的数据增加你的音讯外面,因为你的密钥在后面的块中曾经通过了计算,这时候增加在前面的音讯不会受到你的密钥影响。
如果在音讯前面简略的增加上"but please don't call me anymore",计算新的摘要并发送给你喜爱的妹子,妹子会认为整段音讯就是你的意思。(此处具体计算方法须要参照sha1算法的实现)
就这样一个大写的GG刻在了你的脸上(欲哭无泪)!!!
然而也不必慌,咱们还有HMAC,HMAC解决了这个问题,HMAC在整个hash过程中能无效的密封音讯暗藏密钥,并且不能在尾部追加数据。具体的解决办法参见HMAC的实现。
依据维基百科,没有发现任何已知的HMAC音讯扩大攻打。
祝贺你,妹子到手了,请开始你的性福之旅吧(啊呸,傻逼输入法,是幸福)!!!
到这里其实HmacSHA1加密和SHA1加密的区别就很显著了,心愿大家也都能了解。
参考:
- HMAC vs. raw SHA-1
- 极客学院-hmac
- 极客学院-hashlib
记得帮我点赞哦!
精心整顿了计算机各个方向的从入门、进阶、实战的视频课程和电子书,依照目录正当分类,总能找到你须要的学习材料,还在等什么?快去关注下载吧!!!
朝思暮想,必有回响,小伙伴们帮我点个赞吧,非常感谢。
我是职场亮哥,YY高级软件工程师、四年工作教训,回绝咸鱼争当龙头的斜杠程序员。听我说,提高多,程序人生一把梭
如果有幸能帮到你,请帮我点个【赞】,给个关注,如果能顺带评论给个激励,将不胜感激。
职场亮哥文章列表:更多文章
自己所有文章、答复都与版权保护平台有单干,著作权归职场亮哥所有,未经受权,转载必究!