加解密算法分析

一、概述:

    加密算法是指,发送者对明文进行加密然后生成密文,接受者再对密文解密得到明文的过程。

1、加密与签名区别

    最大的区别是,加密是可逆的,而签名是不可逆的。比如对于明文"Hello world"进行加密后得到结果R,还可以使用密钥通过结果R解密得到"Hello world",而对"Hello world"进行签名得到结果R,却不能使用密钥通过R获"Hello world",试想如果几十个字符就可以存储存储几G的数据,那压缩算法要被彻底颠覆了。

2、加密与签名的使用场景

    加密是对数据进行机密性保护,签名主要用于身份验证。比如A对B发送了信息Message;通过加密后,即便C通过网络包截取获得了Message,它也不知道里面的具体内容,只能看到一堆乱码;通过签名,假设D也用相同的加密算法发送了此Message,但是签名错误,那么B通过签名依然拒绝D的Message。

二、算法分类

    在加密算法之外,为了解决秘钥的分发的问题,出现了:对称加密和非对称加密。最主要的就是密钥的不同,对称加密客户端和服务端使用同一个密钥,非对称加密使用一对不同的密钥。

1、散列(哈希)函数

  • 通常有MD5、SHA1、SHA256、SHA512
  • 实质是抽取特征码,这样一般不会重复!是的,不同的文本它的哈希结果是有可能相同的,但概率很小。
    (举例:比如想要识别一个人,我们可以通过他的指纹来锁定他,指纹出现相同的概率很低吧!在这里,人就相当于数据,而指纹就相当于对人这个数据进行hash后得到的结果)
  • 对任意一个二进制数据进行哈希,可以得到定长的字符串结果,例如MD5哈希结果是128位,更多是以32个字符的十六进制格式哈希输出
  • 还有就是不可逆的,既然是不可逆的,那么当然不是用来加密的,而是签名

2、对称加密

    对称加密指的就是加密和解密使用同一个秘钥,所以叫做对称加密。对称加密只有一个秘钥,作为私钥。 常见的对称加密算法:AES,DES,3DES等。目前用的最广发并且安全的算法是AES。

  • 加密和解密使用同一个秘钥,加密解密的速度快
  • 适合给大数据进行加密
  • 密钥的安全性非常重要

3、非对称加密

    非对称加密指的是:加密和解密使用不同的秘钥,一把作为公开的公钥,另一把作为私钥。公钥加密的信息,只有私钥才能解密。私钥加密的信息,只有公钥才能解密。 常见的非对称加密算法:RSA

  1. 使用 公钥 加密,使用 私钥 解密
  2. 使用 私钥 加密,使用 公钥 解密(私钥签名,公钥验签)
  3. 更安全,当然速度会慢下来,如果随着硬件的突破,使用越来越多,特别是支付

4、区别

    对称加密算法相比非对称加密算法来说,加解密的效率要高得多。但是缺陷在于对于秘钥的管理上,以及在非安全信道中通讯时,密钥交换的安全性不能保障。所以在实际的网络环境中,会将两者混合使用。

5、实例

    在对B/S模型中,可以用如下方式进行数据的安全传输:
(1)、 服务端计算出一对秘钥pub/pri。将私钥保密,将公钥公开。 
(2)、客户端请求服务端时,拿到服务端的公钥pub。 
(3)、客户端通过AES计算出一个对称加密的秘钥X。 然后使用pub将X进行加密。 
(4)、客户端将加密后的密文发送给服务端。服务端通过pri解密获得X。 
(5)、然后两边的通讯内容就通过对称密钥X以对称加密算法来加解密。

三、RSA算法分析:

    假设A、B双方均拥有一对公私钥(PUB_APRI_APUB_BPRI_B)。A向B发送Message的整个签名和加密的过程如下:

  1. A先使用HASH对Message生成一个固定长度的信息摘要Message_hash_A
  2. A使用A的私钥PRI_AMessage_hash_A进行签名得到Message_sign(这里为什么不直接对Message进行签名,而要对Message_hash_A进行签名呢?因为Message的长度可能很长,而Message_hash_A的长度则是固定的,这样性能更高,格式也固定,况且hash的结果一般不会出现重复的可能)
  3. A接着使用B的公钥PUB_B对信息Message和信息Message_sign进行加密得到Message_RSA,这时A将Message_RSA发送给B。

当B接收到A的信息Message_RSA后,获取Message的步骤如下:

  1. B用自己的私钥PRI_B解密得到明文:MessageMessage_sign
  2. 然后B使用A的公钥PUB_AMessage_sign得到Message_hash_A;同时,B再对Message使用与A相同的HASH得到Message_hash_B
  3. 如果Message_hash_AMessage_hash_B相同,则说明Message没有被篡改过。

参考文档:

http://www.cnblogs.com/mddblog/p/5380556.html

猜你喜欢

转载自my.oschina.net/u/3729778/blog/1647130