首先来看一段 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 sys
reload(sys)
sys.setdefaultencoding('utf-8')
import hashlib
import hmac
def 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')
输入后果为
1db0e9132a8dff51e3a4d47497e29a500087da9a
b1c1d8736f20db3fb6c1c66bb1455ed43909f0d8
从后果中能够发现,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 高级软件工程师、四年工作教训,回绝咸鱼争当龙头的斜杠程序员。
听我说,提高多,程序人生一把梭
如果有幸能帮到你,请帮我点个【赞】,给个关注,如果能顺带评论给个激励,将不胜感激。
职场亮哥文章列表:更多文章
自己所有文章、答复都与版权保护平台有单干,著作权归职场亮哥所有,未经受权,转载必究!