1、RSA——非对称加密,会产生公钥和私钥,公钥在客户端,私钥在服务端。公钥用于加密,私钥用于解密。
2、AES——对称加密,直接使用给定的秘钥加密,使用给定的秘钥解密。(加密解密使用相同的秘钥)。
3、MD5——一种单向的加密方式,只能加密,不能解密。
4、Base64编码——对字节数组转换成字符串的一种编码方式。
客户端,服务端的通信逻辑
之前:明文传输通信
客户端将要上传的数据以字典(Map)的方式打包,Post提交给服务器。
服务器接收提交的数据包,通过Key-Value的形式获取客户端提交的值,进行处理。
处理结束,将数据以字典(Map)的形式打包,返回给客户端处理。
加密传输通信
整个流程是:
客户端上传数据加密 ==> 服务器获取数据解密 ==> 服务器返回数据加密 ==> 客户端获取数据解密
客户端上传数据加密 A
客户端随机产生一个16位的字符串,用以之后AES加密的秘钥,AESKey。
使用RSA对AESKey进行公钥加密,RSAKey
(此处某些重要的接口需要加签处理,后续讲解,不要加签处理的省略该步骤)
将明文的要上传的数据包(字典/Map)转为Json字符串,使用AESKey加密,得到JsonAESEncryptedData。
封装为{key : RSAKey, value : JsonAESEncryptedData}的字典上传服务器,服务器只需要通过key和value,然后解析,获取数据即可。
服务器获取数据解密 B
获取到RSAKey后用服务器私钥解密,获取到AESKey
获取到JsonAESEncriptedData,使用AESKey解密,得到明文的客户端上传上来的数据。
(如果客户端进行了加签处理,此处需要验签,以保证数据在网络传输过程中是否被篡改)
服务器返回数据加密 C
将要返回给客户端的数据(字典/Map)转成Json字符串,用AESKey加密处理
(此处也可以加签处理)
封装数据{data : value}的形式返回给客户端
客户端获取数据解密 D
客户端获取到数据后通过key为data得到服务器返回的已经加密的数据AESEncryptedResponseData
对AESEncryptedResponseData使用AESKey进行解密,得到明文服务器返回的数据。