加密
一、服务端
- 准备工作
- 调用非c接口,即可使用正式鉴权接口
二、客户端请求加密流程
先取得要传输的data 部分数据,转换为byte[] 数据
对byte[] 数据进行 Gizp 压缩
对gzip 压缩后的数据进行 异或运算,算法如下图
48634d81-ebdd-4304-ba15-ab32a722f1d3-image.png
对异或运算后的直接数组进行Base64位运算,得到传输字符串,通过http请求传输到服务端
压缩
String raw = "{\"phone\":\"15827580908\",\"channel\":\"111\",\"os\":\"web\"}"; byte[] orgBytes = raw.getBytes("UTF-8"); System.out.println("orgBytes = "+new String(orgBytes)); byte[] sourceCompressBytes = GzipUtility.compress(orgBytes); System.out.println("sourceCompressBytes = "+new String(sourceCompressBytes));
异或加密
long time = System.currentTimeMillis(); byte[] encrypt = EncryptHelper.excuteXorEncrypt(sourceCompressBytes,""+time); System.out.println("encyrpt = "+new String(encrypt)+", time = "+time);
String base64Str = DigestUtils.encodeBase64(encrypt);
- 服务端接收到客户端的数据后,首先进行参数签名校验,目前对以下参数要进行MD5签名校验
- md5(service + data + salt + version + appid);
- 服务端取得数据 data 后,进行Base64解码,然后在按照 异或运算解密,最后进行gzip解压缩,得到明文数据
三、服务端数据返回部分
- 服务端对要返回的body 部分也会进行 gzip压缩、异或加密、base64编码,客户端拿到服务端数据后,
- 要同上述流程一样进行base64解码、异或解密、gzip解压缩,得到明文数据