MD5 算法

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

一、MD5算法概述

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

二、MD5算法流程

MD5算法的流程可以分为以下四个步骤:

  1. 填充消息。

首先,需要将消息填充到512位(64个字节)的倍数长度,填充的规则如下:先填充一个1,然后填充0,直到新的消息长度满足 (原长度 + 1 + 填充长度) 除以512的余数为448。例如,假设原消息长度为64字节,那么填充长度为384字节(即448-64),填充后的消息长度为448字节。

  1. 初始化缓冲区。

初始化一个长度为128位的缓冲区,将A、B、C、D四个变量赋初值。

  1. 计算各消息块的结果。

按照512位(64字节)的分组方式对填充后的消息进行划分,然后进行压缩处理,以此得到每个消息块的结果。具体压缩处理的方法会在下面详细介绍。

  1. 得到最终结果。

将每个消息块的结果进行拼接,得到128位(16字节)的最终结果,即为MD5摘要。

下面对MD5算法的每个步骤进行详细讲解。

三、MD5算法细节

  1. 填充消息

假设输入的消息长度为L,那么填充后的消息长度为N。填充的规则如下:

(1) 首先,填充一个1。

(2) 然后,填充k个0,使得新的消息长度满足 (L + 1 + k) mod 512 = 448。

(3) 最后,将原始消息长度的二进制表示(64位)附加到填充后的消息末尾,得到N = M + 64位长度 的新消息。

  1. 初始化缓冲区

MD5算法使用了四个32位无符号整数A、B、C、D来存储中间结果。它们的初始值分别为(以十六进制表示):

A = 0x67452301;
B = 0xefcdab89;
C = 0x98badcfe;
D = 0x10325476;
  1. 计算各消息块的结果

对于每个512位消息块,MD5算法都会执行以下四个步骤:

(1) 将缓冲区的四个变量复制到临时变量a、b、c、d中。

(2) 对于每个512位消息块,使用一个64项的函数F来处理它。这个函数是用来对每个消息块进行压缩的,将会在下面进行详细讲解。

(3) 将F的结果和a、b、c、d等变量累加,得到新的a’、b’、c’、d’。

(4) 将a’、b’、c’、d’赋值给缓冲区的四个变量。

经过若干个消息块的处理后,最后缓冲区的四个变量即为MD5算法的结果。

  1. 压缩函数F

MD5算法的核心是一个循环运算,该运算由4轮(rounds)共64步组成。每一轮都包含16个步骤,分别用到不同的非线性函数和加法常数。在每一步内,需要进行以下四个操作:

(1) 将消息块的子分组按顺序命名为M0、M1、…、M15。

(2) 复制缓冲区的四个变量到临时变量a、b、c、d中。

(3) 根据当前轮数i,选择不同的非线性函数F、G、H或I,并计算出T值。

(4) 将T与a、b、c、d中的某一个相加,得到新的临时变量a’、b’、c’、d’,并更新缓冲区的四个变量。

压缩函数F的具体实现如下:

对于每一步,根据i的不同值进行不同的操作:

  • 当i在0到15之间时:

T = (B & C) | ((~B) & D)
F = B ^ C ^ D

  • 当i在16到31之间时:

T = (D & B) | ((~D) & C)
F = (5 * i + 1) mod 16

  • 当i在32到47之间时:

T = B ^ C ^ D
F = (3 * i + 5) mod 16

  • 当i在48到63之间时:

T = C ^ (B | (~D))
F = (7 * i) mod 16

其中,符号“&”表示按位逻辑与运算,“|”表示按位逻辑或运算,“~”表示按位取反运算,mod表示取余运算。

在以上的计算中,需要用到一个长度为64的常数表T[],该表有如下的定义:

private static final int[] T = new int[64];
static {
    for (int i = 0; i < 64; i++) {
        T[i] = (int) (long) ((1L << 32) * Math.abs(Math.sin(i + 1)));
    }
}

这个常数表是根据正弦函数生成的,其目的是为了增加MD5算法的随机性,从而提高其安全性。

四、MD5算法应用

MD5算法可以应用于以下几个方面:

  1. 数字签名:MD5算法可用于数字签名,以验证文件是否被篡改过。

  2. 数据完整性校验:MD5算法还可以用于校验数据的完整性,以避免数据在传输过程中被恶意篡改。

  3. 密码存储:将用户的密码使用MD5算法进行加密储存,可以增加用户密码的安全性。

  4. 文件比对:MD5算法可以比较两个文件是否相同,只需要计算它们的MD5值并进行比较即可。文章来源地址https://www.toymoban.com/news/detail-452381.html

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

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

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

相关文章

  • 算法基础--MD5算法介绍

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

    2024年02月08日
    浏览(42)
  • MD5算法

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

    2024年02月04日
    浏览(42)
  • MD5 算法

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

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

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

    2024年02月11日
    浏览(54)
  • 校验算法--md5算法理解(c语言)

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

    2024年02月05日
    浏览(40)
  • Java 实现 MD5 加密算法

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

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

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

    2024年01月19日
    浏览(44)
  • java和C#md5算法互通

    对应的C#代码如下 注意这里需要自己拼接字符串,比如java代码如下 对应的C#代码如下

    2024年02月07日
    浏览(40)
  • C#常用的加密算法之一 MD5

    MD5加密概述,原理及实现 C#常用的加密算法:MD5、Base64、SHA1、SHA256、HmacSHA256、DES、AES、RSA MD5消息摘要算法,属Hash算法一类。MD5算法对输入任意长度的消息进行运行,产生一个128位的消息摘要(32位的数字字母混合码)。 不可逆,相同数据的MD5值肯定一样,不同数据的MD5值不一

    2024年02月10日
    浏览(50)
  • 基于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日
    浏览(37)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包