MD5算法的程序设计和实现

MD5算法的程序设计和实现

算法原理概述

  • MD5 即 Message-Digest Algorithm 5 (信息-摘要算法 5)
  •        MD4 (1990)、MD5(1992, RFC 1321) 由 Ron Rivest 发明,是广泛 使用的 Hash 算法,用于确保信息传输的完整性和一致性。
  •        MD5 使用 little-endian (小端模式),输入任意不定长度信息,以 512-bit 进行分组,生成四个32-bit 数据,最后联合输出固定 128-bit 的信息摘要。
  •        MD5 算法的基本过程为:填充、分块、缓冲区初始化、循环压缩、得出结果

算法逻辑

1.填充padding

  • 在长度为 K bits 的原始消息数据尾部填充长度为 P bits 的标识 100…0,1<=P<=512 (即至少要填充1个bit),使得填充后的消息位 数为:K + P = 448 (mod 512).
  •        注意到当 K = 448 (mod 512) 时,需要 P= 512.
  • 再向上述填充好的消息尾部附加 K 值的低64位 (即 K mod 264),最后得到一个长度位数为K+P+64=0(mod512)的消息。

2.分块

  • 把填充后的消息结果分割为 L 个 512-bit 分组: Y0,Y1,...,YL−1Y0,Y1,...,YL−1      Y_0,Y_1,...,Y_{L-1}Y0​,Y1​,...,YL−1​。
  • 分组结果也可表示成 N 个32-bit 字 M0,M1,..,MN−1M0,M1,..,MN−1      M_0,M_1,..,M_{N-1}M0​,M1​,..,MN−1​,N = L*16。

3.初始化

  • 初始化一个128-bit 的 MD 缓冲区,记为 CVqCVq      CV_qCVq​,表示成4个32-bit寄存器 (A, B, C, D);CV0=IVCV0=IV      CV_0 = IVCV0​=IV。迭代在 MD 缓冲区进行,最后一步的128-bit 输出即为算法结果。
  • 寄存器 (A, B, C, D) 置16进制初值作为初始向量 IV,并采用小端 存储 (little-endian) 的存储结构:

         A = 0x67452301
         B = 0xEFCDAB89
         C = 0x98BADCFE
         D = 0x10325476

4.循环压缩

以512-bit 消息分组为单位,每一分组 Yq (q = 0, 1, …, L-1) 经过4个循环的压缩算法,表示为:

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

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值