MD5 & AES

MD5

MD5是一种常用的哈希算法,固定长度为128位

一、 特点

  1. 长度固定:无论输入多少字节,输出总是16字节(128位)
  2. 不可逆:从结果无法反推原始数据
  3. 高度离散性:输出的16字节毫无规律可言,也就是说MD5的输出结果无法预测
  4. 抗碰撞性:两个不同的数据产生的MD5一致的可能性极低

二、用途

  1. 密码保护:只记录密码的MD5,输入密码时只要校验MD5结果是否一致即可
  2. 文件完整性校验:传输文件时记录一次MD5结果,接收时在计算一次MD5,检查是否一致即可
  3. 数字签名:发布程序时同时发布其MD5,下载程序时,只需计算其MD5是否于发布的一致即可知道程序有无被篡改
  4. 云盘秒传:上传文件时,计算一下该文件的MD5,并在数据库中搜索改MD5是否存在,存在即可不用上传,从而实现文件秒传

三、MD5算法的实现

  1. 填充补位:对输入的内容进行补位,使长度变为N * 512 + 448
    补位方法:先补一个1,后补若干个0
    注意:补位操作必须进行,哪怕长度满足N * 512 + 448,也要补512位
    ps:最后还要在后面加上64位,用来记录原始数据长度,最后信息长度会变成为512位的整数倍
  2. 初始值设定:初始的4个标准幻数分别为A = 01234567,B = 89ABCDEF,C = FEDCA98,D = 76543210,(在计算机中用小端存储)用循环计算初始值,最后的MD5也是这4个标准幻数经过多轮哈希的结果。
  3. 分组处理:把原始数据分为若干个64字节的消息块,每次只计算其中一份。然后在将64字节分为16份,每份4字节,然后调用以下函数计算:
//A,B,C,D为幻数,x为每一小份的4字节数据,S,AC为一些固定常数
//函数内部都是一些逻辑运算(与、或、非、移位等等)
FF(A, B, C, D, X, S, AC)
GG(A, B, C, D, X, S, AC)
HH(A, B, C, D, X, S, AC)
II(A, B, C, D, X, S, AC)

最后上面4个函数会被执行16次,并且每次执行时前4个参数会按照不同的顺序进行传参。

  1. 循环运算:经过上一操作,4个标准幻数会变得与原来完全不同,并与一开始的值相加,得到4个新的4个标准幻数。然后将这4个新的标准幻数用于第二轮计算,如此往复,直到计算完所有数据块。
    最终得到的4个幻数,用16进制表示出来,就是最终的MD5结果。
  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值