鉴权和加密

2017-07-15  本文已影响44人  浮海_2015

加密

一、服务端

  1. 准备工作
717780da-8d4c-41d1-8ce6-715e32621181-image.png
  1. 调用非c接口,即可使用正式鉴权接口

二、客户端请求加密流程

  1.  先取得要传输的data 部分数据,转换为byte[] 数据
    
  2.  对byte[] 数据进行 Gizp 压缩
    
  3.  对gzip 压缩后的数据进行  异或运算,算法如下图
    
  4.      48634d81-ebdd-4304-ba15-ab32a722f1d3-image.png
    
  5.   对异或运算后的直接数组进行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);
  1. 服务端接收到客户端的数据后,首先进行参数签名校验,目前对以下参数要进行MD5签名校验
  2. md5(service + data + salt + version + appid);
  3. 服务端取得数据 data 后,进行Base64解码,然后在按照 异或运算解密,最后进行gzip解压缩,得到明文数据

三、服务端数据返回部分

  1. 服务端对要返回的body 部分也会进行 gzip压缩、异或加密、base64编码,客户端拿到服务端数据后,
  2. 要同上述流程一样进行base64解码、异或解密、gzip解压缩,得到明文数据
上一篇 下一篇

猜你喜欢

热点阅读