18

趣谈HmacSHA1和原生SHA1的区别

 4 years ago
source link: https://studygolang.com/articles/32251
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

趣谈HmacSHA1和原生SHA1的区别

suncle · 大约2小时之前 · 10 次点击 · 预计阅读时间 3 分钟 · 不到1分钟之前 开始浏览    

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


记得帮我点赞哦!

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

resource-introduce

念念不忘,必有回响,小伙伴们帮我点个赞吧,非常感谢。

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

听我说,进步多,程序人生一把梭

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

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

本人所有文章、回答都与版权保护平台有合作,著作权归职场亮哥所有,未经授权,转载必究!


有疑问加站长微信联系(非本文作者)

280

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:1006366459


Recommend

  • 39
    • 微信 mp.weixin.qq.com 6 years ago
    • Cache

    MD4、MD5、SHA1、HMAC、HMAC_SHA1 区别

    MD4、MD5、SHA1、HMAC、HMAC_SHA1 区别

  • 65

      导读 人工智能和区块链作为当今互联网风口代表,颇为博人眼球。有人形象地称其为“生产力”和“生产关系”,这是因为人工智能可以优化社会资源配置,提升生产效率,而区块链则能够建立起全新的基础信任法则。 那么,作为另一大技术风口的...

  • 32

    作为一篇趣谈,这篇文章不打算太过深入的分析ThreadLocal内部机制。 只希望通过一种有趣的方式,让大家了解ThreadLocal的两大用途: 实现线程安全; 保存线程上下文信息

  • 98
    • www.10tiao.com 6 years ago
    • Cache

    趣谈外部排序

    比特科技 关注我们,即时收到优秀面经/面试题/技术博文及IT最新资讯  

  • 13
    • 微信 mp.weixin.qq.com 5 years ago
    • Cache

    趣谈美伊信息战

    最近伊朗又成了国际热点话题,美国和伊朗下来会怎么做,也成了大家关注的焦点。 通常,大家关心的都是双方会出动什么武器,攻击对方...

  • 13

    导读 在第二节,我们学习了Gin框架的路由定义与参数接收,今天应一位同学的要求,来讲解一下参数的绑定与校验。 为什么校验参数? 本不必抛出这个问题的,但顾及到初出茅庐的同学,这里解释一下。

  • 10
    • alexgaynor.net 4 years ago
    • Cache

    SHA1 and Richard Feynman

    SHA1 and Richard Feynman Sun, Feb 26, 2017In Richard Feynman’s appendix to the Roger’s Commission report on the Space Shuttle Challenger disaster, one of the issues he describes is a lack of understanding of the term “safety f...

  • 5
    • www.mikechambers.com 4 years ago
    • Cache

    SHA1 Secure Hash for Flash MX

    SHA1 Secure Hash for Flash MX Saturday, June 8, 2002 Branden Hall has put together an SHA1 hash library for ActionScript. This is similar to the MD5 enc...

  • 11

    Git problem: error: unable to create temporary sha1 filename Posted: 2009-10-15 - Last updated: 2019-06-05 Tagged...

  • 12

    What is the purpose of providing an MD5 or SHA1 hash with a downloadable executable? advertisements I thought they were there for security; to...

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK