Java实现MD5算法过程,并利用自带MD5函数进行对比校验

一、环境说明

操作系统:window10

编程语言:Java (JDK版本 11.0.1)

使用IDE:Intellij IDEA

二、算法原理概述

在这里插入图片描述

整个MD5(信息摘要算法5)的基本过程可以概括为以下几个步骤:

  1. 填充:消息为 K K K bits的原始消息数据尾部填充长度为 P P P bits的标识 1000...0   1 ≤ P ≤ 512 1000...0 \, 1\le P \le 512 1000...01P512 (至少要填充一个bit) 。使得填充后的消息位数满足 K + P ≡ 448 ( m o d   512 ) K + P \equiv 448 (mod \, 512) K+P448(mod512) (注:当 K ≡ 448 ( m o d   512 ) K \equiv 448(mod \, 512) K448(mod512))时, P = 512 P = 512 P=512

    填充好的消息尾部需要在附加 K K K值的低64位即 K   m o d   2 64 K \, mod \,2^{64} Kmod264。 最终结果得到 K + P + 64 ≡ 0 ( m o d   512 ) K + P + 64 \equiv 0 (mod \, 512) K+P+640(mod512)填充消息

  2. 分块:把填充之后的消息结果分割为 L L L 512 − b i t 512-bit 512bit 分组: Y 0 . . Y L − 1 Y_0..Y_{L-1} Y0..YL1 。也是 L L L个64字节的分组。

  3. 缓冲区初始化:初始化一个 128 − b i t 128-bit 128bit的MD缓冲区,记为 C V q CV_q CVq,表示成4个 32 − b i t ( 4 个 b y t e ) 32-bit (4个byte) 32bit(4byte) 的寄存器 ( A , B , C , D ) (A,B,C,D) (A,B,C,D) C V 0 = I V ( I V 为 16 进 制 初 值 ) CV_0 = IV (IV为16进制初值) CV0=IV(IV16)

    在这里插入图片描述

  4. 循环压缩 :对L个消息分组 Y q ( q = 0 , 1 , . . . L − 1 ) Y_q(q = 0, 1,...L-1) Yq(q=0,1,...L1) ,逐个经过4重循环的压缩算法。表示为:

    C V 0 = I V CV_0 = IV CV0=IV

    C V i = H M D 5 ( C V i − 1 , Y i ) CV_i = H_{MD5}(CV_{i-1}, Y_i) CVi=HMD5(CV

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值