算法详解之MD5...


描述: MD5(Messafe - digest algorithm 5)就是信息摘要的一种实现,他可以从任意长度的明文字符串生成128位的哈希值.


摘要哈希生成的正确姿势 : 


1.收集相关业务参数,在这里是金额和目标账户,当然,实际应用中的参数肯定比这多得多,这里只是做了简化.
2.按照规则,把参数名和参数值拼接成一个字符串,同时把给定的密钥也拼接起来,之所以需要密钥是因为攻击者也可能获知拼接的规则.
3.利用MD5算法,从原文生成哈希值.MD5生成的哈希值是128位的二进制数,也就是32位的十六进制数.


举个栗子:
业务参数 : 金额 : 1元 
 目标账户: 1234


按规则拼接: 金额=1_目标账户=1234_key=ABCD  


MD5摘要:   ASDFGHJHGF56FGH456GHJKLFGHJKL




第三方支付平台如何验证请求的签名? 同样分为三步:


1.发送方和请求方约定相同的字符串拼接规则,约定相同的密钥.


2.第三方支付平台接收到支付请求,按照规则拼接业务参数和密钥,利用MD5算法生成Sign.


3.用第三方平台生成的Sign和请求发送过来的Sign做对比,如果两个Sign值一模一样,则签名无误,如果两个Sign不一样,则信息做了篡改.这个过程叫验签.


只有吧底层细节弄明白才算是真正掌握一门技术:


MD5算法就像一个精密复杂的加工厂,在多条流水线交替协作下生产了最终的哈希值,下面的内容比较烧脑,小伙伴做好准备.


MD5算法底层原理:


简要概括MD5算法过程分为四步:
处理原文,设置初始值,循环加工,拼接结果.


第一步:处理原文


首先,我们计算出原文长度(bit)对512求余的结果,如果不等于448,就需要填充原文使得原味对512求余的结果等于448.填充的方法是第一位填充1,其余位填充0,填充完的长度就是 : 512 * N + 448.
之后,用剩余的位置(512 - 448 = 64位) 记录原文的真实长度,把长度的二进制值补在最后,这样处理后的信息长度就是512*(N+1).


第二步:设置初始值
MD5的哈希结果长度为128位,按照32位分成一组共4组,这4组是由4个初始值A,B,C,D经过不断演变得到,MD5官方视线中,A,B,C,D的初始值如下:


A=0*01234567
B=0*89ABCDEF
C=0*FEDCBA98
D=0*76543210


第三步:循环加工


利用官方的非线性函数,在主循环下面64次子循环中,交替使用,在对处理后的原文分成16等份,再进行交替使用M1~M16进行每次16次循环,在进行左位移,流水线计算的记过和B相加,取代原先的B,新ABCD的产生可以归纳为:


新A = 原d
新B = b+((a+F(b,c,d)+Mj+Ki)<<<s)
新C = 原b
新D = 原c


第四步:拼接结果
把循环加工最终产生的A,B,C,D四个值拼接在一起,转换成字符串即可.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值