加密算法是指,发送者对明文进行加密而后生成密文,接受者再对密文解密获得明文的过程。html
最大的区别是,加密是可逆的,而签名是不可逆的。好比对于明文"Hello world"进行加密后获得结果R,还可使用密钥经过结果R解密获得"Hello world",而对"Hello world"进行签名获得结果R,却不能使用密钥经过R获"Hello world",试想若是几十个字符就能够存储存储几G的数据,那压缩算法要被完全颠覆了。算法
加密是对数据进行机密性保护,签名主要用于身份验证。好比A对B发送了信息Message;经过加密后,即使C经过网络包截取得到了Message,它也不知道里面的具体内容,只能看到一堆乱码;经过签名,假设D也用相同的加密算法发送了此Message,可是签名错误,那么B经过签名依然拒绝D的Message。安全
在加密算法以外,为了解决秘钥的分发的问题,出现了:对称加密和非对称加密。最主要的就是密钥的不一样,对称加密客户端和服务端使用同一个密钥,非对称加密使用一对不一样的密钥。网络
对称加密指的就是加密和解密使用同一个秘钥,因此叫作对称加密。对称加密只有一个秘钥,做为私钥。 常见的对称加密算法:AES,DES,3DES等。目前用的最广发而且安全的算法是AES。函数
非对称加密指的是:加密和解密使用不一样的秘钥,一把做为公开的公钥,另外一把做为私钥。公钥加密的信息,只有私钥才能解密。私钥加密的信息,只有公钥才能解密。 常见的非对称加密算法:RSA性能
公钥
加密,使用 私钥
解密私钥
加密,使用 公钥
解密(私钥签名,公钥验签)对称加密算法相比非对称加密算法来讲,加解密的效率要高得多。可是缺陷在于对于秘钥的管理上,以及在非安全信道中通信时,密钥交换的安全性不能保障。因此在实际的网络环境中,会将二者混合使用。大数据
在对B/S模型中,能够用以下方式进行数据的安全传输:
(1)、 服务端计算出一对秘钥pub/pri。将私钥保密,将公钥公开。
(2)、客户端请求服务端时,拿到服务端的公钥pub。
(3)、客户端经过AES计算出一个对称加密的秘钥X。 而后使用pub将X进行加密。
(4)、客户端将加密后的密文发送给服务端。服务端经过pri解密得到X。
(5)、而后两边的通信内容就经过对称密钥X以对称加密算法来加解密。加密
假设A、B双方均拥有一对公私钥(PUB_A
、PRI_A
、PUB_B
、PRI_B
)。A向B发送Message的整个签名和加密的过程以下:spa
Message_hash_A
PRI_A
对Message_hash_A
进行签名获得Message_sign
(这里为何不直接对Message进行签名,而要对Message_hash_A
进行签名呢?由于Message的长度可能很长,而Message_hash_A
的长度则是固定的,这样性能更高,格式也固定,何况hash的结果通常不会出现重复的可能)PUB_B
对信息Message
和信息Message_sign
进行加密获得Message_RSA
,这时A将Message_RSA
发送给B。当B接收到A的信息Message_RSA
后,获取Message
的步骤以下:code
PRI_B
解密获得明文:Message
和Message_sign
;PUB_A
解Message_sign
获得Message_hash_A
;同时,B再对Message
使用与A相同的HASH获得Message_hash_B
;Message_hash_A
与Message_hash_B
相同,则说明Message
没有被篡改过。参考文档:
http://www.cnblogs.com/mddblog/p/5380556.html