首先看看HmacSHA1加密和SHA1加密的代码
#!/usr/mld by/env python #-*-coding : utf-8-* ' ' created on1/31/10:03 am @ author : chenliang @ function : hmac sha1 vs sha1' ' importsysreload (sys (sys.set default encoding () ) ) mporthmacdefsha1(msg ) : ''' sha1加密: param msg :3360 return :长度40位摘要信息' ' sha=hashlib.sha1 ) )。 return sha.hexdigest () defHMAC_sha1 ) key, msg ) : ''' hmac sha1加密: param密钥:param msg:等待加密消息:return:长度为40位的摘要信息' ' m=hmac.new hashlib.sha1(returnm.hexdigest ) ) printhmac_sha1 ) fkewtiz9t E0 fwlqks 4g8hedqaspzfdr4(,me ) ) me
1db0e 9132 A8 dff 51e 3a 4d 47497 e29 a 500087 d a9 a B1 C1 d 8736 f 20 db3FB6C1 c 66b 1455 ed 43909 f0d 8结果显示,HmacSHA1算法和SHA1算法针对任意长度的消息
其实答案很简单。
HMAC vs. raw SHA-1这篇文章中有一个有趣的说明。 翻译后如下
我之前写了,请不要在意具体的摘要计算结果。 重点是解释的有趣和简洁
如果你想向喜欢的人表白,我想出一首优美的十四行诗,但最后我决定只说简单的' i love you '。
想要告白的消息会完好无损地传达给喜欢的妹妹,但不想让别人知道的话,可以事先知道密码nxdcc,然后使用SHA-1算法从消息中生成摘要。
与“i love you”相对应的SHA-1摘要是b b7b 1901 d99 E8 b 26 bb 91d2 de BDB 7d7f 24 b 3158 cf
当你喜欢的妹妹收到消息后,使用SHA-1算法重新计算摘要,并与你发送的摘要进行比较。 如果一致,则表示消息是正确的。
但是,总是有这么刁钻的人试图拦截你的信息,用另一条消息' don't call me anymore '代替,生成新的摘要。 e 267 e 18 f 05 CB6e a3 b 10 b 761 BBA c21 a 0f 92b b8d 0d。 你喜欢的妹妹收到消息后,摘要信息不一致了,我不敢相信了。
虽然看起来很严厉,但是你向妹妹说明了。 我保证今后这种事不会再发生了。 你和妹妹约定在计算hash摘要信息时在消息前加上文本' our secret key.'。 也就是说,新的完整信息是“our secret key.i love you”。 以这种方式,从同一消息中生成以下摘要信息:
e 0759e9b 59 BDD6d 864 d 29 ce 3a 502 ADB 6257 f 7615,原文中的此值计算错误,已提交注释。
此时,那些刁难的人仅仅简单地置换摘要信息是没有效果的。 因为你妹妹使用key msg得到的结果和置换后的摘要信息不一致。 这样,除非别人知道你的私钥,否则不能生成虚假信息。
但另一个问题是SHA-1和HMAC的区别。
使用迭代算法计算SHA-1,首先将消息顺序地划分成64字节的块,并将这些块合并生成20字节的摘要信息。 但是,您的消息可以是任意长度,并且SHA根据其迭代性质在64字节块之后继续计算块,因此此时会出现问题。
刁民再次试图更改你的信息。 他们可能只是把更多的数据添加到你的消息中。 因为您的密钥是在上一个块中计算的,所以此时后续添加的消息不受您的密钥的影响。
如果在消息后面简单地添加“but please don't call me anymore”,计算新的摘要并发送给喜欢的妹妹,妹妹会认为整个消息就是你的意思。 (这里的具体计算方法需要参照sha1算法的实现)
像这样大写的GG刻在你的脸上!
但是,没有必要慌张。 我们有HMAC。 HMAC解决了这个问题。 HMAC在整个散列进程中有效地封装消息隐藏密钥,并且不能在末尾添加数据。 具体解决方案请参阅实现HMAC。
根据维基百科,没有找到已知的HMAC消息扩展攻击。
恭喜你。 妹妹得到了。 请开始你的性福之旅。
到此为止,实际上HmacSHA1加密和SHA1加密的区别很明显,希望大家也能理解。
参考:
我记得HMAC vs. raw SHA-1极客学院-hmac极客学院-hashlib称赞过我哦。
从计算机的各个方向精心整理入门、高级、实战视频课程和电子书,按目录合理分类,总能找到需要的学习资料,还等什么? 关注下载吧!
念念不忘,必有回响,小伙伴们帮我点个赞吧,非常感谢。
我是职场亮哥,YY高级软件工程师,4年工作经验,咸鱼不肯打头阵的斜杠程序员。
听我说。 进步很多,程序的人生是穿梭
如果幸运的话,请点【赞】,然后跟进。 希望你能顺便评论鼓励我。
职场亮哥文章列表:其他文章
本人所有文章、回答都与版权保护平台有合作,著作权归职场亮哥所有,未经授权,转载必究!