应用场景:程序内部需要和第三方程序进行数据交互,设计了加密方案
加密流程:
1.程序在交互开始前已经提供给第三方某个标识
2.第三方根据该标识访问我方加密服务获取动态密钥
3.第三方根据动态密钥对即将传输给我方的数据进行加密,
并将动态密钥和加密后的数据传递给我方
4.我方根据得到的动态密钥,对数据进行解密
说明:加密算法使用我方提供的jar包
本人对加密的业务流程及方法并不熟悉,希望那位能对加密的流程
进行一个详细的说明,尤其是动态密钥在各个环节的用途
应用场景:程序内部需要和第三方程序进行数据交互,设计了加密方案
加密流程:
1.程序在交互开始前已经提供给第三方某个标识
2.第三方根据该标识访问我方加密服务获取动态密钥
3.第三方根据动态密钥对即将传输给我方的数据进行加密,
并将动态密钥和加密后的数据传递给我方
4.我方根据得到的动态密钥,对数据进行解密
说明:加密算法使用我方提供的jar包
本人对加密的业务流程及方法并不熟悉,希望那位能对加密的流程
进行一个详细的说明,尤其是动态密钥在各个环节的用途
首先要搞清楚为什么要加密,主要是解决这么几个问题:
(1)确保服务器和客户端之间的通讯如果被窃听,那么窃听者无法知道传输的明文数据是什么。
(2)对于服务器来说,确保只有你认可的客户端在和你通讯,别的伪造的客户端无权和你通讯。
(3)对于服务器来说,确保客户端传输来的数据,通过中间网络转发的时候,数据没有被篡改。
因此你可以用一种非对称的加密算法,解释下为什么能做到这3点。
对于非对称的加密算法,通讯的双方各需要一个密钥,你生成随机的2个密钥,你掌握一个密钥(k1),叫做私钥,你给第三方一个(k2),叫做公钥。
如果你要和很多第三方通讯,那么你需要生成很多不同的密钥,总之,不同的第三方有不同的密钥。
当你需要和某个第三方通讯的时候,你用你的k1对发送的数据加密。把数据传输给第三方,第三方用你给的k2解密得到原文。第三方给你回传数据正好相反。
对于问题(1),窃听者没有密钥,所以无法对数据解密,知道你们在通讯的内容
对于问题(2),只有授权的一方有密钥,如果他没有密钥,他加密的数据也是无法解密的,因此是无效的数据。
对于问题(3),因为加密、解密用的密钥不同,所以第三方无法篡改或者伪造你发出的加密数据,他只能解密你的数据,而不能反过来制作加密的数据。
因此即便他知道整个加密算法的原理(比如对你的jar反编译,得到了算法和密钥),知道公钥,但是它不能冒充你。
那么非对称算法的原理是什么呢,这个主要利用的是大质数因数分解比较困难,而公钥、私钥分别是两个超大的质数。
上面说的是理论,以java为例,你可以用aes rsa或者des,因为它们都是非对称的加密算法。其中运用最广泛的是aes,甚至现代cpu都在硬件上直接实现了aes。
可以参考:
https://www.cnblogs.com/chen-lhx/p/5817161.html
https://blog.51cto.com/1385903/2094164