哈希函数-md5实现原理

这篇具有很好参考价值的文章主要介绍了哈希函数-md5实现原理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1.MD5算法

1.1.1、位填充

1.1.1.1MD5每个分组是512,因此必须进行位填充

1.2.长度填充

1.3.初始化缓冲区

1.4.以512位分组为单位处理消息

1. 4.1、MD5的压缩函数Hmd5 (CVi-1,Yi-1)

1.4.2MD5的压缩函数基本描述

 1.4.3MD5的压缩函数每一步工作原理

1.4.3.1MD5的每一步

​编辑

eg 第一轮第一步

1.5.输出128位

MD5安全性

2.SHA-1算法

2.1位填充

2.2、长度填充

2.3、初始化缓冲区

2.4、以512位分组为单位处理消息

2.5、输出

 2.6、算法示意图

 2.6.1、四个逻辑函数

2.7SHA-1的后续修改

NIST于1981年提出了3个Hash算法

3,MD5&SHA-1

​编辑


1.MD5算法

MD:消息摘要算法

输入为任意长,输出为128位

哈希函数-md5实现原理

1.1.1、位填充

1.1.1.1MD5每个分组是512,因此必须进行位填充

  1. 填充消息使其长度n = 448 mod 512
  2. 即使消息长度本身满足条件,也必须填充(例如消息长度位448,也必须填充512)
  3. 填充由一个1和其余的0组成
  4. 位填充最小为1,最大为512

哈希函数-md5实现原理

1.2.长度填充

  1. 用64位表示消息位填充前的长度
  2. 将该长度附加在位填充的消息后面——最低有效位在前
  3. 如果消息长度大于2的64次方,则只使用其低位64位(即消息长度对2的64次方取模)

哈希函数-md5实现原理

1.3.初始化缓冲区

  • MD5的中间结果CV保存在4个32位的寄存器(A,B,C,D)中
  • A,B,C,D的初始值如下(最低有效位存放在低地址字节位置)

——A = 0x01 23 45 67

——B = 0x89 ab cd ef 

——C = 0xfe dc ba 98

——D = 0x76 54 32 10

它们称为链接变量

1.4.以512位分组为单位处理消息

哈希函数-md5实现原理

1. 4.1、MD5的压缩函数Hmd5 (CVi-1,Yi-1)

1.4.1.1定义四个辅助逻辑函数

——F(X,Y,Z) = XY v not(X) Z

——G(X,Y,Z) = XZ v not(Z)

——H(X,Y,Z) = X xor Y xor Z

——I(X,Y,Z) = Y xor (X v not(Z))

1.4.1.2每个逻辑函数输入是3个32位的字(x ,y , z ),输出是1个32位的字

MD5逻辑函数定义

循环次数 对应的逻辑函数 C语言描述(&是与,|是或,!~是非,^是异或)
1 F(X,Y,Z) (X & Y) | (~X & Z)
2 G(X,Y,Z) X & Z | Y&(~Z)
3 H(X,Y,Z) X^Y^Z
4 I(X,Y,Z) Y^(X | ~Z)

1.4.1.3常数表T

  • MD5利用一个常数表T来对压缩过程的每一步增加不同的限制,并且用于消除输入中可能存在的规律。
  • 常数表T有64个32位常数构成
  • 每个常数利用正弦函数来构成

哈希函数-md5实现原理

1.4.2MD5的压缩函数基本描述

——压缩函数用4轮来处理一个512分组

——在每1轮中512分组被进一步分为16个32位的小段:

  • X[k], k = 0, 1, 2, ........,15
  • X[k]在每1轮中恰好被使用一次:
  1. X[0]、X[2]、……,X[15]
  2. X[p2(i)],p2(i) = (1+5i) mod 16
  3. X[p3(i)],p3(i) = (5+3i) mod 16
  4. X[p4(i)],p4(i) = 7i mod 16

——每1轮利用1个逻辑函数对4个寄存器(A , B, C, D)进行16步操作

——每轮操作的结果均存放在A , B, C, D四个寄存器中

——第四轮的输出和第一轮的输入相加(模2的32次方)得到下一轮的输入

哈希函数-md5实现原理

 1.4.3MD5的压缩函数每一步工作原理

  • 每1轮利用1个逻辑函数对4个寄存器(A ,B ,C ,D )进行16步操作
  • 每步操作对A、B、C 和 D 四个存储器中的一个进行一次非线性函数运算,然后将所得结果加上第四个存储器的值、一个数据分块和一个常数值,在将所得结果循环左移一个不定的数。
  • 每步操作的通用形式是(记做[abcd f k s i])

      1. a = b + ((a + f(b,c,d) + X[k] + T[i]) <<< s)

——a , b , c , d 是A , B ,C ,D中的一个

——f是逻辑函数F、G 、H和I中的一个

     2. b = a, c = b ,d = c,a = d(循环右移赋值)

  • 每步操作的结果均存放在A, B ,C ,D四个寄存器中

哈希函数-md5实现原理

MD5的四轮迭代哈希函数-md5实现原理

1.4.3.1MD5的每一步

哈希函数-md5实现原理

eg 第一轮第一步

[ABCD F   0    7      1]

A = D

B = B + ((A + F(B,C,D) + X[0] + T[1]) <<< 7)

C = D

D = C

F(B , C , D) = (B & C) | (~B & D)

CLS7 :  循环左移7位

+ : 模2的32次方加运算

一步运算的实质:将(a , b , c , d )中的字右移一位

哈希函数-md5实现原理

哈希函数-md5实现原理

1.5.输出128位

——输出位A、B、C、D的值:低字节位A,最高字节位D

哈希函数-md5实现原理

MD5安全性

——找到具有Hash值相同的两条消息的代价为: 2的64次方

——找到具有给定摘要的消息的代价为:2的128次方

2.SHA-1算法

2.1位填充

  • 填充消息使得长度n = 448 mod 512
  • 即使消息长度本身满足条件,也必须填充
  • 填充由一个1和其余的0组成
  • 位填充最小为1,最大为512

哈希函数-md5实现原理

2.2、长度填充

  • 用64位表示消息位填充前的长度
  • 将该长度附加在位填充的消息后面(最高有效位在前)
  • 如果消息大于2的64次方,则只使用其低64位(即消息长度对2的64次方取模)

哈希函数-md5实现原理

2.3、初始化缓冲区

  • SHA-1的中间结果CV保存在5个32位的寄存器(A,B,C,D,E)中
  • A, B, C, D, E的初始值为
  • A = 67 45 23 01
  • B = ef cd ab 89
  • C = 98 ba dc fe
  • D = 10 32 54 76
  • E = c3 d2 e1 f0

2.4、以512位分组为单位处理消息

哈希函数-md5实现原理

2.5、输出

  • 输出位A、B、C、D、E的值
  • 结果160位

哈希函数-md5实现原理

 2.6、算法示意图

哈希函数-md5实现原理

 加法常量K的计算表

哈希函数-md5实现原理

 2.6.1、四个逻辑函数

步骤 Kt的十六进制 取整数部分
0<= t <=19 f1 = f(t,B,C,D) (B&C)|((~B)&D)
20<= t <=39 f2 = f(t,B,C,D) BCD
40<=t<=59 f3 = f(t,B,C,D) (B&C)|(B&D)|(C&D)
60<=t<=79 f4 = f(t,B,C,D)

BCD

 哈希函数-md5实现原理

SHA-1的压缩函数

  • 压缩函数用4轮来处理一个512分组
  • 每1轮利用1个逻辑函数对5个寄存器(A,B,C,D,E)   进行20步操作
  • 每轮操作的结果均存放在A,B,C,D,E五个寄存器中
  • 第四轮的输出和第一轮的输入相加(模2的32次方) 得到下一轮的输入

·SHA-1的压缩函数
 - 每1轮利用1个逻辑函数对5个寄存器(A,B,C,D,E)进行206操作
 -每步操作的通用形式是(记做[abcdfksi):
                ·ABCDE=(E+f(tBCD)+CLS(A)+W+K),ACLS(B)CD
                -A,B,C,D,E是缓冲区的五个字

                -t:步数
                -f(t,B,C,D):第t步用的逻辑函数

                -CLS(.):循环左移s位
                -W:从当前512位导出的32位字

                - K:第t步的加法常量

                一+:模232加法
-每步操作的结果均存放在A,B,C,D,E五个个寄存器中。

哈希函数-md5实现原理文章来源地址https://www.toymoban.com/news/detail-490349.html

2.7SHA-1的后续修改

  • NIST于1981年提出了3个Hash算法

  • 哈希函数-md5实现原理

3,MD5&SHA-1

哈希函数-md5实现原理

到了这里,关于哈希函数-md5实现原理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java 实现 MD5 加密算法

    1.1 MD5 算法介绍 MD5 消息摘要算法,英文:MD5 Message-Digest Algorithm ,一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。 MD5 是单向加密不可逆的,也就是常说的非对称加密,常用于用户密码的加密,这样即使密

    2024年02月09日
    浏览(55)
  • 基于Java实现的MD5算法实现

    MD5 即 MD5 Message-Digest Algorithm(MD5 消息摘要算法)。 MD4 (1990)、MD5(1992, RFC 1321) 由 Ron Rivest 发明,是广泛使用的 Hash 算法,用于确保信息传输的完整性和一致性。 MD5 使用 little-endian (小端模式),输入任意不定长度信息,以 512-bit 进行分组,生成四个 32-bit 数据,最后联合输出固

    2024年02月16日
    浏览(38)
  • MD5算法:利用python进行md5 hash值的获取

    MD5,即信息摘要算法,英文为MD5 Message-Digest Algorithm,是一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),也叫散列值,用于确保信息传输完整一致。 它可以从一个字符串或一个文件中按照一定的规则生成一个特殊的字符串,这个特殊的

    2024年02月07日
    浏览(37)
  • MD5 算法

    MD5(Message Digest Algorithm 5)是消息摘要算法的一种,它可以将任意长度的“消息”(也可以是文件)计算出一个固定长度的“摘要”,通常是128位。MD5广泛应用于数字签名、数据完整性校验、密码存储等领域。在Java中,可以使用java.security.MessageDigest类来实现MD5算法。 MD5算法的流

    2024年02月05日
    浏览(74)
  • MD5算法

    一、引言 MD5(Message-Digest Algorithm 5)是一种广泛应用的密码散列算法,由Ronald L. Rivest于1991年提出。MD5算法主要用于对任意长度的消息进行加密,将消息压缩成固定长度的摘要(通常为128位)。在密码学、网络安全等领域有着广泛的应用。本文将从算法原理、优缺点及替代方

    2024年02月04日
    浏览(46)
  • 为什么MD5算法不可逆,但网上有很多网站声称能够解密MD5

    我们要明白,MD5不是加密算法,而是一种信息摘要算法,主要用于保证数据的完整性,以及数据不被篡改。既然不是加密算法,那么就不存在解密的说法,但是为什么网上有很多网站声称能够解密MD5呢? MD5算法不可逆 Md5是计算机安全领取常用的一种密码散列函数,主要用于

    2024年02月11日
    浏览(56)
  • 算法基础--MD5算法介绍

      MD5再开发过程中经常碰到的一种算法,因此感觉有必要对其原理进行更深入的了解一下。   散列函数,也称作哈希函数,消息摘要函数,单向函数或者杂凑函数。散列函数主要用于验证数据的完整性。通过散列函数,可以创建消息的“数字指纹”,消息接收方可以通过

    2024年02月08日
    浏览(43)
  • Hive中hash函数及md5函数

    Hive中的HASH函数用于将任意长度的字符串或二进制数据映射为一个固定长度的整数值,其语法如下: 其中,str是要进行哈希计算的字符串或二进制数据。 Hive中的哈希函数采用的是MurmurHash算法,这是一种非常高效的哈希算法。该算法将输入数据分为若干个块,每个块都进行哈

    2024年02月09日
    浏览(50)
  • Azure Blob MD5算法

    笔者所在项目采用Azure Blob来作为文件存储解决方案, 上传的大文件需要一种机制来验证文件的完整性, 而业内通用的解决方案就是用MD5来做校验. Azure Blob在我们上传文件且没有指定Content MD5时, 就会自动帮我们计算文件的MD5值. 通过Microsoft Azure Storage Explorer工具右键查看任何文件

    2024年01月19日
    浏览(45)
  • 校验算法--md5算法理解(c语言)

    ​​​​​​​​​​​​​​RFC 1321:MD5 消息摘要算法 (rfc-editor.org) https://www.rfc-editor.org/rfc/rfc1321 官方参考文档,可以直接拷贝References里的代码,MD类型定义为5后直接使用里面的代码是可以成功执行的,MDString这个函数改一下其实就能用,下面是对MD5算法的执行过程进行理解

    2024年02月05日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包