常见的加密算法原理与实现:MD5加密

本文介绍了MD5加密算法的基本概念,详细阐述了其加密原理,包括原文处理、初始值设置和加密运算过程,并提供了Python实现MD5算法的示例。MD5作为信息摘要算法,广泛应用于防止信息篡改、数字签名等领域。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、基本介绍

MD5加密算法,其全称是Message-Digest Algorithm 5,通常被称为信息摘要算法,所谓的信息摘要就是把明文内容按一定规则生成一段哈希(hash)值,即得到这段明文内容的信息摘要。利用MD5可以基于任意长度的明文字符串生成128位的哈希值,结果唯一且不可逆,因此MD5经常被用于防止信息被篡改、数字签名、以及对明文进行加密等场景。

二、加密原理

MD5算法加密的过程分为三步:处理原文,设置初始值,加密运算。

2.1、处理原文

由于MD5是将信息以512位为一组分组来进行处理,所以首先要计算原文长度(bit)对512的求余结果,如果不等于448,就需要对原文进行填充,使其求余结果等于448。

具体填充方法是第一位为1,余下统一填充为0,填充完后,信息的长度就为N512+448(bit)。之后用剩余的64位(512-448=64位)存储填充前信息的长度,这样处理后的信息长度就是N512+448+64,即512*(N+1)。

其实从这一步来看,好像大部分加密算法都涉及到对转为二进制后的信息的按位填充,以使其满足后续分组处理信息加密的需求。

2.2、设置初始值

MD5的哈希结果长度为128位,按每32位分成一组共4组。这4组结果是由4个初始值A、B、C、D经过不断演变得到。官方定义的A、B、C、D的标准初始值如下(16进制):

A: 01234567
B: 89abcdef
C: fedcba98
D: 76543210

2.3、加密运算

在具体加密过程中,会进行N次循环,N就是在第一步处理原文后的分组个数,假设处理后原文长度为1024,那N就是2,即总共循环两次。

在每次循环内,会将每组的512位信息细分成16个小组,每组长度为32位。进行四轮总计64次运算,每一轮即每十六次运算都会用同一个函数进行处理。运算过程中会用到一组非线性函数如下,&是与运算,|是或运算,~是非运算,^是异或运算:

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))

在每次子循环中F、G、H、I 交替使用,第一个16次使用F,第二个16次使用G,第三个16次使用H,第四个16次使用I。

设Mj表示消息的第j个子分组(j的范围:0~15,也就是前面分的16组信息),这里的s,t都是常量,<<<s代表左移s位

FF(a,b,c,d,Mj,s,Ki),表示a=b+((a+F(b,c,d)+Mj+Ki)<<<s)
GG(a,b,c,d,Mj,s,Ki),表示a=b+((a+G(b,c,d)+Mj+Ki)<<<s)
HH(a,b,c,d,Mj,s,Ki),表示a=b+((a+H(b,c,d)+Mj+Ki)<<<s)
II(a,b,c,d,Mj,s,Ki),表示a=b+((a+I(b,c,d)+Mj+Ki)<<<s)

s在四轮循环中的值如下:

s[ 0..15] := {
    7, 12, 17, 22,  7, 12, 17, 22,  7, 12, 17, 22,  7, 12, 17, 22 }
s[16..31] := {
    5,  9, 14, 20,  5,  9, 14, 20,  5,  9, 14, 20,  5,  9, 14, 20 }
s[32..47] := {
    4, 11, 16, 23,  4, 11, 16, 23,  4, 11, 16, 23,  4
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值