当前位置: 首页 > article >正文

MD5算法的学习

MD5_百度百科

MD5信息摘要算法(Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位的(16字节)的散列值(hash value),用于确保信息传输完整一致。MD5由美国密码学家罗纳德v·李维斯特设计,与1992年公开,用以取代MD4算法。

MD5的散列值通常用十六进制表示,如:

MD5(1)= C4CA4238A0B923820DCC509A6F75849B

MD5(2)= C81E728D9D4C2F636F067F89CC14862C

MD5(MD5) = 7F138A09169B250E9DCB378140907378

算法步骤

1.数据填充与分组

使消息长度满足特定条件(长度为512的倍数),MD5对消息进行填充。

在消息后附加一个1位

接着,附加若干个0位,直到消息长度(mod 512)等于448位

最后,附加消息的原始长度(以64位二进制表示),使总长度达到512的倍数

例如:“abc”

a的ASCLL:97,二进制位:01100001

b的ASCLL:98,二进制位:01100010

c的ASCLL:99,二进制位:01100011

拼接:01100001 01100010 01100011(24位)

添加1个1:01100001 01100010 01100011 1(25位)

添加0:01100001 01100010 01100011 10000000 00000000 00000000 ... (共 423 个 0)

附加原始消息

原始消息是24位:24 = 0x18 = 00000000 00000000 00000000 00000000 00011000

  • 大端序(Big Endian):高字节存储在低地址,低字节存储在高地址。
  • 小端序(Little Endian):低字节存储在低地址,高字节存储在高地址。

以小端序是:

00011000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
最后,将这64位加到之前的末尾:
01100001 01100010 01100011 10000000 00000000 00000000 ... (423 个 0) ... 00011000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

  • 消息内容:01100001 01100010 01100011
  • 填充部分:10000000 00000000 ...(423 个 0)
  • 长度部分:00011000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

2.初始化散列值

MD5算法初始化了4个32位的缓冲区变量

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

3.计算散列值

将填充后的消息按512位分成多个块,每个块进一步分为16个32位的小块

(1)定义辅助函数

(2)主循环

MD5对每个消息块执行64次迭代(分为四轮,每轮16次),每次使用一个非线性函数和一个常量K[i]

  • 每轮的常量 K[i]K[i]K[i] 是从正弦函数生成的。
  • 每次迭代都将更新缓冲区变量 A,B,C,DA, B, C, DA,B,C,D。

每次迭代的核心公式:

  • a,b,c,d 是缓冲区变量。
  • M[k]M[k]M[k] 是当前消息块的某个子块。
  • K[i]K[i]K[i] 是常量。
  • sss 是循环左移的位数。

(3)更新缓冲区

(4)输出结果


http://www.kler.cn/a/407332.html

相关文章:

  • 相机网卡开启巨型帧和关闭节能模式方法
  • 第一个autogen与docker项目
  • 驱动开发系列29 - Linux Graphics Kernel 内核内存管理子系统介绍
  • 量子感知机
  • 力扣 LeetCode 235. 二叉搜索树的最近公共祖先(Day10:二叉树)
  • 数据结构-7.Java. 对象的比较
  • 08 —— Webpack打包图片
  • 谷粒商城-消息队列Rabbitmq
  • 从熟练Python到入门学习C++(record 6)
  • AMD64(Advanced Micro Devices) 超微半导体 (x86-64)
  • leecode45.跳跃游戏||
  • rembg AI扣图
  • php:使用Ratchet类实现分布式websocket服务
  • 第三百二十八节 Java网络教程 - Java网络TCP客户端套接字
  • PLC的指令全集1+TIA PORTAL仿真(西门子S7 1200)
  • 浮点数的表示—IEEE754标准
  • c#:winform引入bartender
  • 【大数据技术基础】 课程 第5章 HBase的安装和基础编程 大数据基础编程、实验和案例教程(第2版)
  • Windows之使用putty软件以ssh的方式连接Linux中文显示乱码
  • Django+Nginx+uwsgi网站使用Channels+redis+daphne实现简单的多人在线聊天及消息存储功能
  • 大疆上云api开发
  • /etc/sudoers 文件格式解读
  • VM虚拟机装MAC后无法联网,如何解决?
  • 飞凌嵌入式旗下教育品牌ElfBoard与西安科技大学共建「科教融合基地」
  • android 性能分析工具(03)Android Studio Profiler及常见性能图表解读
  • 绝世唐门:雨浩黑发泪痣形象,王东无新建模,动画漫画对比凸显