1. 加密概述
加密应用场景
1) 密码加密,常用于登录密码和支付密码等,此类加密的特点是希望密码加密之后不能被解密,因此可以比较安全的保存密码而不会泄漏明文,因此适合用不可逆加密算法,且不需要密钥,目前这类加密算法唯一的破解方法是暴力破解,即用密码字典等手段
不可逆的加密算法有md5
2) 网络传输报文加密
网络传输如果用明文,容易被截取,之后泄漏用户敏感信息,因此对于交易类等安全要求较高的报文传输,要对其进行加密,且要选择可逆的加密算法,服务端需要解密,可以选择的加密算法有rsa,3des等
3des加密的缺陷:
3des属于对称加密算法,即加密和解密都是用的同一密钥,因此,分发和传递密钥中会泄密密钥。
假想方案一:双方约定一个加密密钥,密钥可以通过线下密函分发,这样只要双方保证密钥不被泄漏,那么加密将是安全的
但是该方案仍然存在如下缺点:
1. 密钥如果长期不更换,容易泄漏,那么又要分发一次密钥,这是不安全的
2. 如果客户端为普通用户使用,那么就无法保证密钥的安全性,因此不适合用3des
这里指的是持久化保存密钥。
假想方案二:每次请求都产生一个随机的密钥,通过网络将密钥和传输到服务端,这样客户端就不需要保存密钥,然后网络传输密钥仍然是不安全的
Rsa加密的缺陷:
Rsa加密报文的速度很慢,适合用户少量数据加密
那么有没有更好的方案呢,当然有,那就是将rsa和3des结合起来加密
用3des加密报文,用rsa加密3des的密钥,这样在传输过程中,可以保证3des的密钥不被泄漏,从而保证报文的密文不被破解
加密方式举例:
请求报文:rsa公钥(3des加密密钥)|3des(报文明文)
响应报文:3des(报文明文)
具体方案流程:
1) 首先客户端在每次请求服务端的时候,随机产生一个3des密钥,且在客户端程序的内存中暂时保存该密钥
2) 然后用3des对报文明文进行加密得到密文m
3) 用rsa公钥对3des密钥进行加密得到密文n
4) 将m和n拼接起来发送给服务端
5) 服务端用rsa私钥将3des的密钥解密
6) 并用3des密钥解密报文
7) 响应时,用3des对响应报文进行加密
8) 客户端用保存起来的3des密钥对响应报文解密
9) 解密之后丢弃3des密钥
2. 签名概述
签名的意义:
数字签名可以保证信息的原始性、完整性,因此,数字签名可以解决否认、伪造、篡改及冒充等问题。具体要求:发送者事后不能否认发送的报文签名、接收者能够核实发送者发送的报文签名、接收者不能伪造发送者的报文签名、接收者不能对发送者的报文进行部分篡改、网络中的某一用户不能冒充另一用户作为发送者或接收者
具体方案:
方案一(md5加密算法+密钥进行签名):
首先在数据的发送方,将报文和密钥拼接起来,再进行md5加密,加密之后的报文就叫签名,然后签名和原报文拼接起来发送至服务端,服务端也有一个密钥,对签名进行验签,这样即使报文传输过程中被篡改,由于篡改者不知道密钥,也就没办法算出正确的签名,因此服务端验签就不过,而且这个签名是跟客户端绑定的,也就保证了报文来自合法的客户端
方案1的效果:
保证数据传输的完整性
保证数据来源于合法的客户端,即其他用户(除服务端外)无法伪造或者篡改
但是客户端可以抵赖,因为服务端可以模拟该签名
此方案典型的案例就是md5签名
方案二(mac签名)
采用一个密钥,将报文分段用des加密
和方案1差不多,由于该方案中,密钥与报文加密的算法更复杂,因此较md5更安全
方案三(rsa+md5)
用md5算法将报文加密得到一个串m,用rsa私钥对m加密得到签名s
接收者对报文用md5加密得到m1,用rsa公钥解密s得到m2,比较m1和m2
该方案达到了方案1的效果,且加密算法也是安全的,而且由于发送者的密钥是唯一的,即使是接收者,也不能伪造签名,因此发送者不能抵赖自己的签名
3. 加密算法分类
对称与非对称
从密钥的角度来看,加密算法分为对称加密和非对称加密
对称加密:
加密密码和解密密码是相同的
Des
3des
非对称加密:
加密密码和解密密码是不相同的
Rsa
可逆与不可逆
从可逆角度来看,可以分为不可逆和可逆算法
不可逆:md5,加完密之后不可解密
可逆加密:
Rsa,des,3des
加完密之后可解
4. md5加密
用途:常用于密码加密和签名
基本算法为求余
原理请参考文章:http://www.jiamisoft.com/blog/index.php/2271-md5jiamisuanfa-2.html
5. des
原理
DES 使用一个 56 位的密钥以及附加的 8 位奇偶校验位,产生最大 64 位的分组大小。这是一个迭代的分组密码,使用称为 Feistel 的技术,其中将加密的文本块分成两半。使用子密钥对其中一半应用循环功能,然后将输出与另一半进行“异或”运算;接着交换这两半,这一过程会继续下去,但最后一个循环不交换。DES 使用 16 个循环,使用异或,置换,代换,移位操作四种基本运算。
详情请参考:http://aub.iteye.com/blog/1131504
6. 3des
比des加密更安全的一种加密算法
请参考:http://aub.iteye.com/blog/1131514
7. rsa
加密:公钥加密,私钥解密,知道公钥,密文,明文无法推导私钥,只有私钥才能进行解密,只要保管好私钥,密文将不会泄密,加密安全度高
原理请参考文章:
RSA算法原理1http://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.html
RSA算法原理2
http://www.ruanyifeng.com/blog/2013/07/rsa_algorithm_part_two.html
8. https
https也是基于非对称加密算法(如rsa)和对称加密算法(如3des)进行加密的