首先来看一段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加密的区别就很显著了,心愿大家也都能了解。


参考:

  1. HMAC vs. raw SHA-1
  2. 极客学院-hmac
  3. 极客学院-hashlib

记得帮我点赞哦!

精心整顿了计算机各个方向的从入门、进阶、实战的视频课程和电子书,依照目录正当分类,总能找到你须要的学习材料,还在等什么?快去关注下载吧!!!

朝思暮想,必有回响,小伙伴们帮我点个赞吧,非常感谢。

我是职场亮哥,YY高级软件工程师、四年工作教训,回绝咸鱼争当龙头的斜杠程序员。

听我说,提高多,程序人生一把梭

如果有幸能帮到你,请帮我点个【赞】,给个关注,如果能顺带评论给个激励,将不胜感激。

职场亮哥文章列表:更多文章

自己所有文章、答复都与版权保护平台有单干,著作权归职场亮哥所有,未经受权,转载必究!