Md5算法原理

9 篇文章 0 订阅
1 篇文章 0 订阅


最近一直有人说MD5是加密算法,其实我个人认为它只能算是一个编码,而不能算成是一个加密算法,本质上MD5是不可逆的,只有双方拿到共同的数据进行MD5处理之后,然后再经过对比。

MD5算法原理
   MD5(单向散列算法)全称是Message-Digest Algorithm 5(信息--摘要算法)
 
MD5功能:
   输入任意长度的信息,经过处理,输出为128位的信息(数字指纹)
   不同的输入得到的不同的结果(唯一性)
   根据128位的输出结果不可能反推出输入的信息(不可逆)
MD5算法过程
   对MD5算法简要的叙述可以为:MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。
1.单向散列函数
      单向散列函数也称哈希函数。散列函数一直在计算机科学中使用,散列函数就是把可变的输入长度串转换成固定长度输出值。而单向散列函数是在一个方向上工作的散列函数,从预映射值很容易计算出它的散列值。
2.1.1单向散列函数的基本原理
     单向散列函数H(M)是对一个任意长度的消息M进行运算,返回一个固定长度的值h,其中h的长度是m.
     1)给定值M,可以很方便地计算出h值
     2)给定h,根据H(M)=h计算M很难
     3)给定M,要找到另一则消息M'并使得H(m)=H(m')很难
事实上,单向散列函数是建立在压缩函数的思想基础之上的。单向散列函数的输出值为一个长度为n的散列值。该长度比输入值得长度m要小很多。
进行该函数运算的前提条件是我们应根据一定规则将消息分成若干个消息片段,散列函数的输入值是一个消息片段和前一个消息片段的输出值,而其输出值则是
该消息片段前所有消息片段的散列值。这也就是说,消息片段M的散列值得计算方法
h1 = f(M1,h1-1)
2.1.2 散列值的长度
     我们都知道,散列值越长则安全性越好,MD5算法就是单向散列函数产生128位的散列值
     1)运用单向散列函数生成一则消息的散列值。
     2)将该散列值附于消息之后
     3)产生包含散列值和消息在内的一连串的数值和散列值
     4)将第一步产生的散列值与第三步产生的散列值组合起来生成一个更大的散列值。
2.1.3 MD5算法的基本原理
     MD5算法以512位分组来处理输入文本,每一组又划分为16个32位子分组。算法的输出由4个32位分组组成,将它们级联形成一个128位散列值。
     1):填充
            MD5的第一步是在原消息中增加填充位,目的是使原消息长度等于一个值,即比512的倍数少64位。例如,如果原消息长度为1000位,则要填充472位。
      填充对用一个1位和多个0位进行填充。
     2);添加长度
          添加填充位后,下一步要计算机消息原厂,将其加进填充后的消息末尾。先计算消息的长度,不包括填充位。
     3);将输入分成512位的块
     4);初始化链接变量
     5);处理块
         初始化之后,就要开始实际算法了。这是个循环,对消息中的多个512位块运行。
         5.1步:将四个链接变量复制到四个变量a,b,c,d中,实际上,这个算法将a,b,c,d组合成128位寄存器(abcd),寄存器(abcd)在实际算法运算中保存中间结果和最终结果。
         5.2步:将当前512位块分解为16个子块,每个子块为32位。
         5.3步:主循环有四轮,每一轮中的操作,都要处理一个中央块中的16个子块。每一轮的输入如下:a,16个子块,b:变量a,b,c,d c常量t
下面总结这四轮的迭代。每一轮输出的中间和最终结果复制到寄存器abcd中。

1.首先对b,c,d作一次非线性函数运算,这个运算在四轮中不同
2.变量a加进第1步的输出
3.消息子块M[i]加进第二步的输出
4.常量加进第三部输出
5.第4步的输出循环左移s位
6.变量b加进第5步输出
7.第6步输出成为下一步的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值