首页 > 编程知识 正文

对称加密算法和非对称,对称加密与非对称加密算法

时间:2023-05-06 00:35:10 阅读:220420 作者:139

总结整理自微信公众号:程序员迷路的萝莉

1.对称加密与非对称加密

对称密钥示意图

非对称密钥示意图


**对称加密:**加密和解密使用的密钥是同一个
优点:计算量小,算法速度快,加密效率高 缺点:密钥容易泄漏。不同的会话需要不同的密钥,管理起来很费劲,
常用算法:DES,3DES,IDEA,CR4,CR5,CR6,AES
**非对称加密:**需要公钥和私钥,公钥用来加密,私钥用来解密
优点:安全,不怕泄漏 缺点:速度慢、性能较差,无法应用于长期的通信
常用算法:RSA,ECC,DSA

2.MD5加密

MD5算不算加密算法:
认为不属于的人是因为他们觉得不能从密文(散列值)反过来得到原文,即没有解密算法,所以这部分人认为MD5只能属于算法,不能称为加密算法;
认为属于的人是因为他们觉得经过MD5处理后看不到原文,即已经将原文加密,所以认为MD5属于加密算法;

MD5算法过程

对MD5算法简要的叙述可以为:MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。

第一步、填充:如果输入信息的长度(bit)对512求余的结果不等于448,就需要填充使得对512求余的结果等于448。填充的方法是填充一个1和n个0。填充完后,信息的长度就为N*512+448(bit);

第二步、记录信息长度:用64位来存储填充前信息长度。这64位加在第一步结果的后面,这样信息长度就变为N*512+448+64=(N+1)*512位。

第三步、装入标准的幻数(四个整数):标准的幻数(物理顺序)是(A=(01234567)16,B=(89ABCDEF)16,C=(FEDCBA98)16,D=(76543210)16)。如果在程序中定义应该是:
(A=0X67452301L,B=0XEFCDAB89L,C=0X98BADCFEL,D=0X10325476L)。有点晕哈,其实想一想就明白了。

第四步、四轮循环运算:循环的次数是分组的个数(N+1)

1)将每一512字节细分成16个小组,每个小组64位(8个字节)

2)先认识四个线性函数(&是与,|是或,~是非,^是异或)

3)设fdfy表示消息的第j个子分组(从0到15),<<

4)四轮运算

5)每轮循环后,将A,B,C,D分别加上a,b,c,d,然后进入下一循环。

MD5算法的原理可简要的叙述为:MD5码以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。

3.彩虹表破解MD5

先来了解两个函数
H(X):生成信息摘要的狂野的荷花函数,比如MD5,比如SHA256。

R(X):从信息摘要转换成另一个字符串的衰减函数(Reduce)。其中R(X)的定义域是H(X)的值域,R(X)的值域是H(X)的定义域。但要注意的是,R(X)并非H(X)的反函数。

通过交替运算H和R若干次,可以形成一个原文和狂野的荷花值的链条。假设原文是aaaaaa,狂野的荷花值长度32bit,那么狂野的荷花链表就是下面的样子:

这个链条有多长呢?假设H(X)和R(X)的交替重复K次,那么链条长度就是2K+1。同时,我们只需把链表的首段和末端存入狂野的荷花表中:


给定信息摘要:920ECF10

如何得到原文呢?只需进行R(X)运算:

R(920ECF10) = kiebgt

查询狂野的荷花表可以找到末端kiebgt对应的首端是aaaaaa,因此摘要920ECF10的原文“极有可能”在aaaaaa到kiebgt的这个链条当中。

接下来从aaaaaa开始,重新交替运算R(X)与H(X),看一看摘要值920ECF10是否是其中一次H(X)的结果。从链条看来,答案是肯定的,因此920ECF10的原文就是920ECF10的前置节点sgfnyd。
需要补充的是,如果给定的摘要值经过一次R(X)运算,结果在狂野的荷花表中找不到,可以继续交替H(X)R(X)直到第K次为止。

给定信息摘要:FB107E70

经过多次R(X),H(X)运算,得到结果kiebgt

通过狂野的荷花表查找末端kiebgt,可以找出首端aaaaaa

但是,FB107E70并不在aaaaaa到kiebgt的狂野的荷花链条当中,这就是R(X)的碰撞造成的。

这个问题看似没什么影响,既然找不到就重新生成一组首尾映射即可。但是想象一下,当K值较大的时候,狂野的荷花链很长,一旦两条不同的狂野的荷花链在某个节点出现碰撞,后面所有的明文和狂野的荷花值全都变成了一毛一样的值。

这样造成的后果就是冗余存储。原本两条狂野的荷花链可以存储 2K个映射,由于重复,真正存储的映射数量不足2K。

虽然都说MD5加密一下密码比较好,但是如果密码过于简单,比如123456,经过MD5加密之后还是不安全,因为别有用心的人可以使用彩虹表来撞库得到密码。因此为了加大破解难度,需要给MD5算法加盐,盐值就是在密码hash过程中添加的额外的随机值,这个值是由系统随机生成的,并且只有系统知道。即便两个用户使用了同一个密码,由于系统为它们生成的salt值不同,散列值也是不同的。

4.SHA加密

SHA-1 与 MD5的主要区别是什么呢?

1.摘要长度不同。
MD5的摘要的长度尽128bit,SHA-1摘要长度160bit。多出32bit意味着什么呢?不同明文的碰撞几率降低了2^32 = 324294967296倍。

2.性能略有差别
SHA-1生成摘要的性能比MD5略低。

SHA-256:可以生成长度256bit的信息摘要。

5.AES对称加密

在这里我们重新梳理一下:

1.把明文按照128bit拆分成若干个明文块。

2.按照选择的填充方式来填充最后一个明文块。

3.每一个明文块利用AES加密器和密钥,加密成密文块。

4.拼接所有的密文块,成为最终的密文结果。

6.关于HTTP和HTTPS的加密

SSL的加密过程:客户端发送https请求,服务器持有机构的公钥和密钥,先将公钥发送给客户端,客户端使用该公钥加密自己的生成的会话密钥,发送给服务器,服务器拿到后,使用私钥解密公钥获得会话密钥,客户端使用会话密钥开始信息传输,SSL的加密过程是非对称的,而https信息传输是对称的。

7.对称加密与非对称加密的区别

1、加密和解密过程不同

对称加密过程和解密过程使用的同一个密钥,加密过程相当于用原文+密钥可以传输出密文,同时解密过程用密文-密钥可以推导出原文。但非对称加密采用了两个密钥,一般使用公钥进行加密,使用私钥进行解密。

2、加密解密速度不同

对称加密解密的速度比较快,适合数据比较长时的使用。非对称加密和解密花费的时间长、速度相对较慢,只适合对少量数据的使用。

3、传输的安全性不同

对称加密的过程中无法确保密钥被安全传递,密文在传输过程中是可能被第三方截获的,如果密码本也被第三方截获,则传输的密码信息将被第三方破获,安全性相对较低。

非对称加密算法中私钥是基于不同的算法生成不同的随机数,私钥通过一定的加密算法推导出公钥,但私钥到公钥的推导过程是单向的,也就是说公钥无法反推导出私钥。所以安全性较高。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。