MD5加密算法原理及一些其他的加密算法

MD5是一种广泛使用的哈希算法,具备不可逆性、唯一性和抗修改性。它通过数据填充、添加消息长度和数据处理三个步骤进行加密,确保了消息摘要的固定长度和安全性。MD5常用于数字签名、防止篡改和数据保密。尽管存在碰撞风险,但通过加盐可以提高其复杂性。此外,文章还提到了其他加密算法如DES、AES、RSA和SHA1,它们在不同的场景下提供不同程度的安全保障。
摘要由CSDN通过智能技术生成

Md5加密算法:

概述:md5算法也可以称为消息摘要算法,属于hash算法的一种,md5算法对输入的任意长度的消息进行运行,然后产生一个128位的消息摘要 

特点:

#不可逆性

唯一性:相同数据的md5值肯定一样,不同数据的md5值不一样

性质:

#压缩性:任意长度输入的消息,经过算法加密之后,md5的长度值都是固定的;(也可以说是超损压缩)

#容易计算:从原数据计算出MD5值很容易

#抗修改性:只要原数据产生一丝修改,md5值都会与原来的不一样

为了让md5码更加安全,我们可以通过加盐的方式,增强md5值的复杂性。 盐要足够长足够乱 得到的md5码就很难查到。

md5算法的用途:

#产生数字签名,防止抵赖

#防止被篡改

#增强数据的保密性,防止明文泄露

md5加密算法原理及实现:
md5算法原理:
1、数据填充

对消息进行数据填充,使消息的长度对512取模得448,设消息长度为X,即满足X mod 512=448。根据此公式得出需要填充的数据长度。

填充方法:在消息后面进行填充,填充第一位为1,其余为0。

(此时消息长度为N*512+448)

2、添加消息长度

在用来进行的第一步结果之后再填充上原消息的长度,可存储长度为64位。如果消息长度大于264,则只使用其低64位的值,即(消息长度 对 264取模)。

在此步骤进行完毕后,最终消息长度就是512的整数倍。

(此时消息长度为(N+1)*512 )

3、数据处理

首先需要用到4个常数:

四个32位变量初始化(经过研究所得,为固定值)

A = 0×01234567 

B = 0×89ABCDEF 

C = 0xFEDCBA98 

D = 0×76543210  

它们称为链接变量(chaining variable)

以上为标准的幻数的(物理顺序)

如果在程序中(小端模式)定义应该是: 

A = 0x67452301

B = 0xEFCDAB89

C = 0x98BADCFE

D = 0x10325476

然后需要用到4个非线性函数

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

(&是与, |是或, ~是非, ^是异或)

然后是4种操作

FF(a,b,c,d,Mi,s,tj)  表示a=b+((a+(F(b,c,d)+Mi+tj)<<< s)

GG(a,b,c,d,Mi,s,tj) 表示 a=b+((a+(G(b,c,d)+Mi+tj)<<< s) 

HH(a,b,c,d,Mi,s,tj) 表示 a=b+((a+(H(b,c,d)+Mi+tj)<<< s) 

II(a,b,c,d,Mi,s,tj)   表示a=b+((a+(I(b,c,d)+Mi+tj)<<< s) 

其中Mi表示消息的第i个子分组(从0到15,共16个),<<< s表示循环左移s位

常数tj为: 

在第j步中,tj是4294967296*abs(sin(j))的整数部分,i的单位是弧度。

(4294967296是2的32次方)

亦可用 0x100000000UL * abs(sin((double)j)) 计算

x循环左移s位:

( s << x ) | ( s >> (32 - x) )

4.MD5运算:

由类似的64次循环构成,分成4轮,每轮16次。每轮使用FF,GG,HH,II中的一种操作;

一轮中,a,b,c,d的使用顺序轮转;

例如第一轮:

第一次计算 FF(a,b,c,d,M0,s,t1)

                   a = a+(F(b,c,d)+M0+t1);

                   a = ( s <<a ) | ( s >> (32 - a) );

                   a = a + b;

第二次计算 FF(b,c,d,a,M1,s,t2)

                   b = b+(F(c,d,a)+M1+t2);

                   b = ( s <<b ) | ( s >> (32 - b) );

                   b = b + c;

这4轮共64步是: 

(初次使用的a,b,c,d为A,B,C,D的值,而Mi,s,tj根据下面的数值进行使用,可认为是常量,)

第一轮 

FF(a,b,c,d,M0,7,0xd76aa478) 

FF(d,a,b,c,M1,12,0xe8c7b756) 

FF(c,d,a,b,M2,17,0×242070db) 

FF(b,c,d,a,M3,22,0xc1bdceee) 

FF(a,b,c,d,M4,7,0xf57c0faf) 

FF(d,a,b,c,M5,12,0×4787c62a) 

FF(c,d,a,b,M6,17,0xa8304613) 

FF(b,c,d,a,M7,22,0xfd469501) 

FF(a,b,c,d,M8,7,0×698098d8) 

FF(d,a,b,c,M9,12,0×8b44f7af) 

FF(c,d,a,b,M10,17,0xffff5bb1) 

FF(b,c,d,a,M11,22,0×895cd7be) 

FF(a,b,c,d,M12,7,0×6b901122) 

FF(d,a,b,c,M13,12,0xfd987193) 

FF(c,d,a,b,M14,17,0xa679438e) 

FF(b,c,d,a,M15,22,0×49b40821) 

第二轮 

GG(a,b,c,d,M1,5,0xf61e2562) 

GG(d,a,b,c,M6,9,0xc040b340) 

GG(c,d,a,b,M11,14,0×265e5a51) 

GG(b,c,d,a,M0,20,0xe9b6c7aa) 

GG(a,b,c,d,M5,5,0xd62f105d) 

GG(d,a,b,c,M10,9,0×02441453) 

GG(c,d,a,b,M15,14,0xd8a1e681) 

GG(b,c,d,a,M4,20,0xe7d3fbc8) 

GG(a,b,c,d,M9,5,0×21e1cde6) 

GG(d,a,b,c,M14,9,0xc33707d6) 

GG(c,d,a,b,M3,14,0xf4d50d87) 

GG(b,c,d,a,M8,20,0×455a14ed) 

GG(a,b,c,d,M13,5,0xa9e3e905) 

GG(d,a,b,c,M2,9,0xfcefa3f8) 

GG(c,d,a,b,M7,14,0×676f02d9) 

GG(b,c,d,a,M12,20,0×8d2a4c8a) 

第三轮 

HH(a,b,c,d,M5,4,0xfffa3942) 

HH(d,a,b,c,M8,11,0×8771f681) 

HH(c,d,a,b,M11,16,0×6d9d6122) 

HH(b,c,d,a,M14,23,0xfde5380c) 

HH(a,b,c,d,M1,4,0xa4beea44) 

HH(d,a,b,c,M4,11,0×4bdecfa9) 

HH(c,d,a,b,M7,16,0xf6bb4b60) 

HH(b,c,d,a,M10,23,0xbebfbc70) 

HH(a,b,c,d,M13,4,0×289b7ec6) 

HH(d,a,b,c,M0,11,0xeaa127fa) 

HH(c,d,a,b,M3,16,0xd4ef3085) 

HH(b,c,d,a,M6,23,0×04881d05) 

HH(a,b,c,d,M9,4,0xd9d4d039) 

HH(d,a,b,c,M12,11,0xe6db99e5) 

HH(c,d,a,b,M15,16,0×1fa27cf8) 

HH(b,c,d,a,M2,23,0xc4ac5665) 

第四轮 

II(a,b,c,d,M0,6,0xf4292244) 

II(d,a,b,c,M7,10,0×432aff97) 

II(c,d,a,b,M14,15,0xab9423a7) 

II(b,c,d,a,M5,21,0xfc93a039) 

II(a,b,c,d,M12,6,0×655b59c3) 

II(d,a,b,c,M3,10,0×8f0ccc92) 

II(c,d,a,b,M10,15,0xffeff47d) 

II(b,c,d,a,M1,21,0×85845dd1) 

II(a,b,c,d,M8,6,0×6fa87e4f) 

II(d,a,b,c,M15,10,0xfe2ce6e0) 

II(c,d,a,b,M6,15,0xa3014314) 

II(b,c,d,a,M13,21,0×4e0811a1) 

II(a,b,c,d,M4,6,0xf7537e82) 

II(d,a,b,c,M11,10,0xbd3af235) 

II(c,d,a,b,M2,15,0×2ad7d2bb) 

II(b,c,d,a,M9,21,0xeb86d391) 

消息分以512位为一分组进行处理,每一个分组进行上述4轮共64次计算后,将A,B,C,D分别加上计算得到的a,b,c,d。当做新的A,B,C,D,并将这4个变量赋值给a,b,c,d再进行下一分组的运算。由于填充后的消息长度为(N+1)*512,则共需计算N+1个分组。计算所有数据分组后,这4个变量为最后的结果,即MD5值。

常用的加密算法还有那些?

DES加密算法

DES加密算法是一种分组密码,以64位为分组对数据加密,它的密钥长度是56位,加密解密用同一算法。DES加密算法是对密钥进行保密,而公开算法,包括加密和解密算法。这样,只有掌握了和发送方相同密钥的人才能解读由DES加密算法加密的密文数据。因此,破译DES加密算法实际上就是搜索密钥的编码。对于56位长度的密钥来说,如果用穷举法来进行搜索的话,其运算次数为256。

随着计算机系统能力的不断发展,DES的安全性比它刚出现时会弱得多,然而从非关键性质的实际出发,仍可以认为它是足够的。不过,DES现在仅用于旧系统的鉴定,而更多地选择新的加密标准。

AES加密算法

AES加密算法是密码学中的高级加密标准,该加密算法采用对称分组密码体制,密钥长度的最少支持为128、192、256,分组长度128位,算法应易于各种硬件和软件实现。这种加密算法是美国联邦政府采用的区块加密标准,这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。

AES加密算法被设计为支持128/192/256位(/32=nb)数据块大小(即分组长度);支持128/192/256位(/32=nk)密码长度,,在10进制里,对应34×1038、62×1057、1.1×1077个密钥。

RSA加密算法

RSA加密算法是目前最有影响力的公钥加密算法,并且被普遍认为是目前最优秀的公钥方案之一。RSA是第一个能同时用于加密和数宇签名的算法,它能够抵抗到目前为止已知的所有密码攻击,已被ISO推荐为公钥数据加密标准。RSA加密算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。

Base64加密算法

Base64加密算法是网络上最常见的用于传输8bit字节代码的编码方式之一,Base64编码可用于在HTTP环境下传递较长的标识信息。例如,在JAVAPERSISTENCE系统HIBEMATE中,采用了Base64来将一个较长的唯一标识符编码为一个字符串,用作HTTP表单和HTTPGETURL中的参数。在其他应用程序中,也常常需要把二进制数据编码为适合放在URL(包括隐藏表单域)中的形式。此时,采用Base64编码不仅比较简短,同时也具有不可读性,即所编码的数据不会被人用肉眼所直接看到。

SHA1加密算法

SHA1是和MD5一样流行的消息摘要算法。SHA加密算法模仿MD4加密算法。SHA1设计为和数字签名算法(DSA)一起使用。

SHA1主要适用于数字签名标准里面定义的数字签名算法。对于长度小于2“64位的消息,SHA1会产生一个160位的消息摘要。当接收到消息的时候,这个消息摘要可以用来验证数据的完整性。在传输的过程中,数据很可能会发生变化,那么这时候就会产生不同的消息摘要。SHA1不可以从消息摘要中复原信息,而两个不同的消息不会产生同样的消息摘要。这样,SHA1就可以验证数据的完整性,所以说SHA1是为了保证文件完整性的技术。

SHA1加密算法可以采用不超过264位的数据输入,并产生一个160位的摘要。输入被划分为512位的块,并单独处理。160位缓冲器用来保存散列函数的中间和最后结果。缓冲器可以由5个32位寄存器(A、B、C、D和E)来表示。SHA1是一种比MD5的安全性强的算法,理论上,凡是采取“消息摘要”方式的数字验证算法都是有“碰撞”的——也就是两个不同的东西算出的消息摘要相同,互通作弊图就是如此。但是安全性高的算法要找到指定数据的“碰撞”很困难,而利用公式来计算“碰撞”就更困难一目前为止通用安全算法中仅有MD5被破解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值