Zephyr's Repository Zephyr's Repository
首页
笔记
技术
更多
收藏
关于
  • 📂 分类
  • 🏷️ 标签
  • 📅 归档

Zephyr

偷得浮生半日闲
首页
笔记
技术
更多
收藏
关于
  • 📂 分类
  • 🏷️ 标签
  • 📅 归档
  • Web

  • 密码学

    • MD5
      • 简介
      • 算法过程
    • Base64
    • Shift
    • AES
    • DES
    • RSA
  • 技术文档

  • 资料

  • 博客搭建

  • GitHub技巧

  • 技术
  • 密码学
Zephyr
2022-07-02
目录

MD5

# MD5

# 简介

md5是一种信息摘要算法,一种被广泛使用的密码散列函数,可以产生出一个128bit(16bytes)的散列值,用来确保信息传输完整一致性。

# 算法过程

  1. 将待hash的信息进行预处理
  • MD5将待加密的消息分割成每512位为一个分组,得到以下公式
N∗512+R
1
  • 其中R是剩余信息的位位数
  • 当R=0时,需要单独补上一个512位的分组
  • 当R < 448时,需要补位到448位,再在其后面添加64位消息长度的二进制
  • R >= 448时,除了补满这一个512位分组外,还需要再补一个512位的分组
  1. 初始化MD缓存器

    MD5运算要用到一个128位的MD5缓存器,用来保存中间变量和最终结果。该缓存器又可看成是4个32位的寄存器A、B、C、D,小端序分为别:

        A = 0x67452301
        B = 0xefcdab89
        C = 0x98badcfe
        D = 0x10325476
    
    1
    2
    3
    4
  2. 循环处理分组数据段

    定义4个非线性函数F、G、H、I,对输入的报文运算以512位数据段为单位进行处理。对每个数据段都要进行4轮的逻辑处理,在4轮中分别使用4个不同的函数F、G、H、I。每一轮以ABCD和当前的512位的块为输入,处理后送入ABCD(128位)

    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))
    
    1
    2
    3
    4

    每次进入一个512位的分组,循环执行四种操作,每种操作执行16次,具体如下:当第一组512位的分组进来后

    • 0-15轮使用F函数进行处理
    • 16-31轮使用G函数进行处理
    • 32-47轮使用H函数进行处理
    • 48-63轮使用I函数进行处理

    处理完毕后获得新的中间值a、b、c、d,其中b是A、B、C、D左移S位得到的,使用该值更新原始的A、B、C、D,继续对下一个512位的分组进行处理,直到所有的块都处理完毕后,将最终的A、B、C、D进行顺序级联,就是消息的128位hash值

#MD5
上次更新: 2022/07/21, 22:10:28
XXE漏洞原理及利用
Base64

← XXE漏洞原理及利用 Base64→

最近更新
01
0CTF 2016 piapiapia
07-23
02
CISCN 2019 初赛 Love
07-22
03
PHP反序列化
07-21
更多文章>
Theme by Vdoing | Copyright © 2021-2022 Zephyr | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×