MD5加密算法

MD5是一种消息摘要算法,无论输入消息长度如何,均产生128位固定长度的消息摘要。算法包括数据填充、添加长度、初始化变量及数据处理四个步骤。通过4个32位寄存器A、B、C、D进行消息处理,使用F、G、H、I四个辅助函数进行运算。
摘要由CSDN通过智能技术生成

MD5消息摘要算法(Message-Digest Algorithm)。它对输入的任意长度的消息进行运算,产生一个128位的消息摘要。

算法原理
  1. 数据填充
    填充消息使其长度与448模512同余(长度=448 mod 512),即时消息长度本身已经满足了上述长度要求也需要填充。
    填充方法:附一个1在消息后面,然后用0填充,直至符合长度要求(长度=448 mod 512)。
  2. 添加长度
    在上一步结果之后添加64位的消息长度。如果消息长度大于264,则只使用其低64位。最终消息长度正好是512的整数倍。
  3. 初始化变量
    用4个变量(A、B、C、D)计算消息摘要。A、B、C、D都是32位寄存器。这些寄存器以下面的16进制数来初始化:
    A=01234567h ,B=89abcdefh , C=fedcba98h , D=76543210h
  4. 数据处理
    以512位分组为单位,进行处理消息。首先定义4个辅助函数,每个都是以3个32位双字作为输入,输出1个32位双字。
    4个函数:
        F(X,Y,Z)=(X & Y) | ((~X) & Z);
        G(X,Y,Z)=(X & Z) | (Y & (~Z));
        H(X,Y,Z)=X ^ Y ^ Z;
        I(X,Y,Z)=Y ^ (X | (~Z));

    "&“是与操作,”|“是或操作,”~“是非操作,”^"是异或操作。
      这4轮变换是对进入主循环的512位消息分组的16个32位字分别进行如下操作:将A、B、C、D的副本a、b、c、d中的3个经F、G、H、I运算后的结果与第4个相加,再加上32位字和一个32位字的加法常数,并将所得之值循环左移若干位,最后将所得结果加上a、b、c、d之一,并回送至ABCD,由此完成一次循环。
      所用的加法常数由这样一张表T[i]来定义,其中i为1…64,T[i]等于4294967296乘以abs(sin(i))的整数部分,这样做是为了通过正弦函数和幂函数来进一步消除变换中的线性。

512位分组运算完毕后,A、B、C、D的级联被输出为MD5散列的结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值