大家好,又见面了,我是你们的朋友全栈君。
1. 加密算法分类
加密算法通常分为对称性加密算法和非对称性加密算法。对于对称性加密算法,信息接收双方都需事先知道密匙和加解密算法且其密匙是相同的,之后便是对数据进行加解密了。
非对称算法与之不同,发送双方A,B事先均生成一堆密匙,然后A将自己的公有密匙发送给B,B将自己的公有密匙发送给A,如果A要给B发送消息,则先需要用B的公有密匙进行消息加密,然后发送给B端,此时B端再用自己的私有密匙进行消息解密,B向A发送消息时为同样的道理。
2. 对称性加密算法
类型 |
定义 |
密钥长度 |
安全性 |
共通点 |
DES |
DES是一种分组数据加密技术(先将数据分成固定长度的小数据块,之后进行加密),速度较快,适用于大量数据加密 |
56 |
依赖密钥受穷举搜索法攻击 |
发送接收使用相同的对称密钥 |
3DES |
3DES是一种基于DES的加密算法,使用3个不同密匙对同一个分组数据块进行3次加密,如此以使得密文强度更高 |
112 168 |
军事级,可抗差值分析和相关分析 |
|
AES |
相较于DES和3DES算法而言,AES算法有着更高的速度和资源使用效率,安全级别也较之更高了,被称为下一代加密标准。 |
128 192 256 |
安全级别高,高级加密标准 |
3. 非对称性加密算法
RSA:由 RSA 公司发明,是一个支持变长密钥的公共密钥算法,需要加密的文件块的长度也是可变的;
DSA(Digital Signature Algorithm):数字签名算法,是一种标准的 DSS(数字签名标准);
ECC(Elliptic Curves Cryptography):椭圆曲线密码编码学。
RSA和DSA的安全性及其它各方面性能都差不多,而ECC较之则有着很多的性能优越,包括处理速度,带宽要求,存储空间等等,主要体现在以下方面:
1. 抗攻击性强。相同的密钥长度,其抗攻击性要强很多倍。
2. 计算量小,处理速度快。ECC总的速度比RSA、DSA要快得多。
3. 存储空间占用小。ECC的密钥尺寸和系统参数与RSA、DSA相比要小得多,意味着它所占的存储空间要小得多。这对于加密算法在IC卡上的应用具有特别重要的意义。
4. 带宽要求低。当对长消息进行加解密时,三类密码系统有相同的带宽要求,但应用于短消息时ECC带宽要求却低得多。带宽要求低使ECC在无线网络领域具有广泛的应用前景。
4. 线性散列算法(签名算法)
MD5,SHA1 ,HMAC等都属于线性散列算法,这几种算法只生成一串不可逆的密文,经常用其效验数据传输过程中是否经过修改,因为相同的生成算法对于同一明文只会生成唯一的密文,若相同算法生成的密文不同,则证明传输数据进行过了修改。通常在数据传说过程前,使用MD5和SHA1算法均需要发送和接收数据双方在数据传送之前就知道密匙生成算法,而HMAC与之不同的是需要生成一个密匙,发送方用此密匙对数据进行摘要处理(生成密文),接收方再利用此密匙对接收到的数据进行摘要处理,再判断生成的密文是否相同。
5. 非对称性加密算法
1、公钥加密体制用于保密性时,就是公钥加密,私钥解密。 因为公钥是可以公开了, 那么任何人都可以使用公钥对信息进行加密,但是只有持有私钥的人才能正确解密。这样就保证了信息的保密性,因为只有私钥持有者才能正确解密。这就是“公钥加密私钥解密”,也可以说是”公共密钥加密系统”。
2、公钥加密体制用于认证性时,比如数字签名,即私钥持有者对信息进行签名,验证者可以根据公开的公钥进行验证签名是否正确和有效,即实现了认证性,以及不可抵赖性。这就是”私钥签名,公钥验证“,也可以说是“公共密钥签名系统”。
6. 公共密钥签名系统
再来说一下“公共密钥签名系统“目的:(如果晕就多看几遍,这个没搞清,后面的代码就更晕)
A欲传(信息)给B,但又怕B不确信该信息是A发的。
1.A选计算(信息)的HASH值,如用MD5方式计算,得到:[MD5(信息)]
2.然后用自已的私钥加密HASH值,得到:[私钥(MD5(信息))]
3.最后将信息与密文一起传给B:传给B:[(信息) + 私钥(MD5(信息))]
B接到 :[(信息) + 私钥(MD5(信息))]
1.先用相同的HASH算法算出(信息)的HASH值,这里也使用MD5方式
得到: [MD5(信息)!]
2. 再用A的公钥解密 [ 私钥(MD5(信息))]
[公钥(私钥(MD5(信息)))] = [(MD5(信息)]
如能解开,证明该 [ 私钥(MD5(信息))]是A发送的
3.再比效[MD5(信息)!]与[(MD5(信息)]
如果相同,表示(信息)在传递过程中没有被他人修改过
7. RSA加密解密过程图解
8. 选用加密算法
1. 当我们需要加密大量的数据时,建议采用对称加密算法,提高加解密速度。这是因为非对称加密算法的运行速度比对称加密算法的速度慢得多。
2. 签名只能非对称算法,对称加密算法不能实现签名。
3. 当数据量很小时,我们可以考虑采用非对称加密算法。这是因为对称加密算法的密钥管理是一个复杂的过程,密钥的管理直接决定着他的安全性。
但是,在实际的操作过程中,我们通常采用的方式是:采用非对称加密算法管理对称算法的密钥,然后用对称加密算法加密数据,这样我们就集成了两类加密算法的优点,既实现了加密速度快的优点,又实现了安全方便管理密钥的优点。
那采用多少位的密钥呢? RSA建议采用1024位的数字,ECC建议采用160位,AES采用128为即可。
9. 总结
1.通过简单的URLENCODE + BASE64编码防止数据明文传输
2 对普通请求、返回数据,生成MD5校验(MD5中加入动态密钥),进行数据完整性(简单防篡改,安全性较低,优点:快速)校验。
3 对于重要数据,使用RSA进行数字签名,起到防篡改作用。
4 对于比较敏感的数据,如用户信息(登陆、注册等),客户端发送使用RSA加密,服务器返回使用DES(AES)加密。
原因:客户端发送之所以使用RSA加密,是因为RSA解密需要知道服务器私钥,而服务器私钥一般盗取难度较大;如果使用DES的话,可以通过破解客户端获取密钥,安全性较低。而服务器返回之所以使用DES,是因为不管使用DES还是RSA,密钥(或私钥)都存储在客户端,都存在被破解的风险,因此,需要采用动态密钥,而RSA的密钥生成比较复杂,不太适合动态密钥,并且RSA速度相对较慢,所以选用DES)
所有加密DEMO的代码:https://github.com/LearnMoreAndBetter/Encryption_Demo
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/141831.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...