Java加密及签名介绍

应用间通常通过接口进行数据交互,数据交互即会涉及到数据安全传输,而确保数据交互安全手段有很多,今天主要聊聊数据加密。

加密算法

对外的接口一般为http接口,为了确保数据不被他人截获甚至篡改,最简单的方式就是对数据进行加密,接收方收到密文后解密然后进行后续处理。这里进行的加密方式有两种:对称加密非对称加密

对称加密

即加密解密使用同一个秘钥,通信的双方共同持有一个秘钥通信(当前主流的算法是AES)。

特点:
1.秘钥长度固定,加密解密效率较高。
2.被破解的概率小,提供iv向量增加破解难度,一般加密明文都用这个。

非对称加密

即加密解密使用不同的秘钥对-公钥、私钥。公钥暴露给各个使用方,自己保存私钥,使用方通过公钥加密明文,自己使用私钥解密密文实现通信(主要算法有RSA),过程如下:
A和B通信
A -> B
1.请求:A使用B的公钥加密请求,B接到请求后使用B的私钥解密获取明文处理
2.响应:B处理完成后,使用A的公钥加密处理结果,A收到响应后,使用A的私钥解密密文得要响应明文

特点:
1.更安全,密钥对更复杂,公钥私钥都非常长,几乎无法破解。
2.加解密效率低,不仅算法复杂,而且秘钥对长度进一步增加了解密的难度,大量内容使用此算法严重影响用户体验及系统效率。

注:
秘钥对公钥私钥都可以用来加解密,只不过使用私钥加密公钥解密安全性几乎没有,因为公钥是暴露出去的。

加签名

加密需要对原内容整体进行加密生成密文,总的来说还是有一定消耗,有些应用场景并需要加密,或者采取更加复杂的结合使用对称非对称加密来处理通信。
如常用的下载功能,只需要确保下载的东西正确即可,一般会使用到MD5码比对。
MD5为信息摘要算法,顾名思义,它是对内容进行精简,提取出来一段摘要信息(固定长度)。基于哈希散列将内容转化为定长的数据(如32位字符串),或者说是根据内容计算出对应的哈希值。
好比给你发了一个身份证,通过身份证和本人比对确认你就是你,而不是他人冒充的(这种也不能完全认为没有问题哦)。
所以这里要说一句:md5不是加密算法!

非对称加密算法不止可以加解密,也提供了加签名的功能,类似MD5,使用秘钥对内容提取生成签名,接收方使用公钥对明文及签名进行验签以确保内容没有被篡改。

实际运用场景举例

曾在对接平安接口时根据平安方要求,对接口进行了安全度较高的处理,首先http转为https(nginx上配置,原接口不变),然后对内容进行AES加密解密,同时对内容进行RSA加签验签,安全度相当的高。

当时有个疑问,为什么用https,都是https安全,它到底怎么安全的。经查询资料,原来https也是使用的加密解密这一套,不过它使用的更高明,且还额外通过CA认证进一步确保信息安全。

https对加解密的应用大致如下:
1.验明正身,根据证书及CA认证确保网站安全。
2.双方沟通选定如何进行加密通信(算法,版本等)
2.客户端生成一个随机的对称秘钥,使用服务端公钥加密传给服务端,服务端使用私钥解密获取对称秘钥,然后双方使用对称秘钥进行http通讯

上述即使用到了对称密钥的高效,又使用到了非对称密钥的安全,确保了https的安全性。

猜你喜欢

转载自blog.csdn.net/u012098021/article/details/107358989