哈希加密算法
加密算法的分类
1讲党课简报 .对称加密
采⽤对称秘钥的加密系统,加密、解密过程均采⽤同⼀把秘钥,通信双⽅必须同时获得这把钥匙进⾏加密解密操作。
常见对称加密:DES,3DES,AES
2.⾮对称加密
⾮对称加密系统采⽤的加密解密秘钥是不同的,加密的称为公钥,解密的称为私钥。公钥加密私钥解密、私钥签名公钥验证。
常见的⾮对称算法:RSA,DSA,ECC
3.哈希函数加密算法
⽆需借助任何秘钥,Hash算法严格上来说并不属于加密算法,⽽是与加密算法属于并列关系的⼀种算法。概括来说,哈希(Hash)是古代美女图片 将⽬标
⽂本转换成具有相同长度的、不可逆的杂凑字符串(或叫做消息摘要),⽽加密(Encrypt)是将⽬标⽂本转换成具有不同长度的、可逆的密
⽂。
常见的哈希加密算法:MD5,SHA-1,SHA-2
哈希函数特点
1.单向不可逆
哈希算法是⼀种单向密码体制,即只有加密过程,没有解密过程,很难通过结果推算出输⼊值,⽽对称和⾮对称加密算法都是通过秘钥反向推导密
码原⽂。
2.可重复性
相同输⼊经过同⼀哈希函数得到相同散列值,但并⾮散列值相同则输⼊结果相同。
3.抗冲突性
不同的输⼊痰多是什么原因引起的 数据,经过同⼀散列函数,产⽣的散列值不相同,相同则产⽣哈希冲突,。对儿童画画涂色 原始信息的任何⼀点改变都会导致结果的哈希值巨⼤
的不同。举个例⼦,假如原始数据是⼏百万字的⽂章,你在其中哪怕改动⼀个标点,计算出的哈希值都会有很⼤的变化。
4.输出长度固量筒的使用 定
⽆论输⼊的源数据的长度是多少,同⼀种Hash算法转换后结果的长度都相同,⽽加密转换后结果的长度⼀般与源数据的长度正相关。MD5的
返回值总是128bit,SHA-1的返回值是160bit,都是固定长度,MD5如果按⼗六进制表⽰的话是32位⼗六进制的数,SHA-1是40位⼗六进
制的数。
MD5
MD5即Message-DigestAlgorithm5(信息摘要算法5),是计算机⼴泛使⽤的散列算法之⼀。经MD2、MD3和MD4发展⽽来,诞⽣于20世
纪90年代初。⽤于确保信息传输完整⼀致。虽然已被破解,但仍然具有较好的安全性,加之可以免费使⽤,所以仍⼴泛运⽤于数字签名、⽂件完
整性验证以及⼝令加密等领域。
算法原理:
1.数据填充
对消息进⾏数据填充,使消息的长度对512取模得448,设消息长度为X,即满⾜Xmod512=448。根据此公式得出需要填充的数据长度。
填充⽅法:在消息后⾯进⾏填充,填充第⼀位为1,其余为0。
2.添加消息长度
在第⼀步结果之后再填充上原消息的长度,可⽤来进⾏的存储长度为64位。如果消息长度⼤于264,则只使⽤其低64位的值,即(消息长度
对264取模)。在此步骤进⾏完毕后,最终消息长度就是512的整数倍。
3.数据处理
准备需要⽤到的数据:
4个常数:A=0x67452301,B=0x0EFCDAB89,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));
把消息分以512位为⼀分组进⾏处理,每⼀个分组进⾏4轮变换,以上⾯所说4个常数为起始变量进⾏计算,重新输出4个变量,以这4个变量再
进⾏下⼀分组的运算,如果已经是最后⼀个分组,则这4个变量为最后的结果,即MD5值。
哈希冲突(碰撞)
散列算法得到的结果位数是有限的,⽐如MD5算法计算出的结果字长为128位,意味着只要我们穷举2^128次,就肯定能得到⼀组碰撞,下⾯让
我们来看看⼀个真实的碰撞案例。我们之所以说MD5过时,是因为它在某些时候已经很难表现出散列算法的某些优势——⽐如在应对⽂件的微⼩
修改时,散列算法得到的指纹结果应当有显著的不同,⽽下⾯的程序说明了MD5并不能实现这⼀点。
importhashlib
#两段HEX字节串,注意它们有细微差别
a=x("0e306561559aa787d00bc6f70bbdfe3404cf03659e704f8534c00ffb659c4c8740cc942feb2da115a3f4155cbb86d7d1f34a42059d78f5a
b=x("0e306561559aa787d00bc6f70bbdfe3404cf03659e744f8534c00ffb659c4c8740cc942feb2da115a3f415dcbb86d7d1f34a42059d78f5a
#输出MD5,它们的结果⼀致
print(5(a).hexdigest())
print(5(b).hexdigest())
###a和b输出结果都为:
cee9a457e790cf20d4bdaa6d69f01e41
cee9a457e790cf20d4bdaa6d69f01e41
⽽诸如此类的碰撞案例还有很多,上⾯只是原始⽂件相对较⼩的⼀个例⼦。事实上现在我们⽤智能⼿机只要数秒就能找到MD5的⼀个碰撞案例,
因此,MD5在数年前就已经不被推荐作为应⽤中的散列算法⽅案,取代它的是SHA家族算法,也就是安全散列算法(SecureHash
Algorithm,缩写为SHA)。
SHA
SHA实际包括有⼀系列算法,分别是SHA-1、SHA-224、SHA-256、SHA-384以及SHA-512。⽽我们所说的SHA2实际是对后⾯4中的统称。
各种SHA算法的数据⽐较如下表,其中的长度单位均为位:
MD5和SHA1,它们都有4个逻辑函数,⽽在SHA2的⼀系列算法中都采⽤了6个逻辑函数。
以SHA-1为例,算法包括有如下的处理过程:
1.对输⼊信息进⾏处理及填充长度信息
和MD5处理输⼊⽅式相同
2.信息分组处理
经过添加位数处理的明⽂,其长度正好为512位的整数倍,然后按512位的长度进⾏分组,可以得到⼀定数量的明⽂分组,我们⽤Y,Y,……
Y表⽰这些明⽂分组。对于每⼀个明⽂分组,都要重复反复的处理,这些与MD5都是相同的。
⽽对于每个512位的明⽂分组,SHA1将其再分成16份更⼩的明⽂分组,称为⼦明⽂分组,每个⼦明⽂分组为32位,我们且使⽤M[t](t=0,1,
……15)来表⽰这16个⼦明⽂分组。然后需要将这16个⼦明⽂分组扩充到80个⼦明⽂分组,我们将其记为W[t](t=0,1,……79),扩充的具
体⽅法是:当0≤t≤15时,Wt=Mt;当16≤t≤79时,Wt=(W⊕W⊕W⊕W)<<<1,从⽽得到80个⼦明⽂分组。
3.初始化缓存
所谓初始化缓存就是为链接变量赋初值。前⾯我们实现MD5算法时,说过由于摘要是128位,以32位为印泥怎么洗掉 计算单位,所以需要4个链接变量。同样
SHA-1采⽤160位的信息摘要,也以32位为计算长度,就需要5个链接变量。我们记为A、B、C、D、E。其初始赋值分别为:A=
0x67452301、B=0xEFCDAB89、C=0x98BADCFE、D=0x10325476、E=0xC3D2E1F0。
如果我们对⽐前⾯说过的MD5算法就会发现,前4个链接变量的初始值是⼀样的,因为它们本来就是同源的。
4.计算信息摘要
经过前⾯的准备,接下来就是计算信息摘要了。SHA1有4轮运算众男争春 ,每⼀轮包括20个步骤,⼀共80步,最终产⽣160位的信息摘要,这160位的摘
要存放在5个32位的链接变量中。
在SHA1的4论运算中,虽然进⾏的就具体操作函数不同,但逻辑过程却是⼀致的。⾸先,定义5个变量,假设为H0、H1、H2、H3、H4,对其
分别进⾏如下操作:
(A)、将A左移5为与函数的结果求和,再与对应的⼦明⽂分组、E以及计算常数求和后的结果赋予H0。
(B)、将A的值赋予H1。
(C)、将B左移30位,并赋予H2。
(D)、将C的值赋予H3。
(E)、将D的值赋予H4。
(F)、最后将H0、H1、H2、H3、H4的值分别赋予A、B、C、D
这⼀过程表⽰如下:
⽽在4轮80步的计算中使⽤到的函数和固定常数如下表所⽰:
01
N-1
t-3t-8t-14t-16
经过4轮80步关于美景的作文 计算后得到的结果,再与各链接变量的初始值求和,就得到了我们最终的信息摘要剥削的读音 。⽽对于有多个明⽂分组的,则将前⾯所得到火锅汤底 的结
果作为初始值进⾏下⼀明⽂分组的计算,最终计算全部的明⽂分组就得到了最终的结果。
本文发布于:2023-03-22 07:29:12,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/cfcb2574e5ab43a4e60d66b6e23c1322.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:md5碰撞.doc
本文 PDF 下载地址:md5碰撞.pdf
留言与评论(共有 0 条评论) |