数据传输加密
第三方调用业务接口的时候,由于某些业务的特殊性,需要对请求参数进行加密传输,业务接口返回的数据也会进行加密传输,
注意:当前场景下业务的请求参数全部以json格式并加密放入requestBody中,业务方返回的数据也会全部是json格式。
当第三方调用业务接口,通过header中的encrypted参数的值来判定入参和返回结果是否需要加密。
encrypted=加密算法/请求加密模式/返回加密模式
举例:encrypted=AES/REQBODY/RESP
参数 | 参数值说明 |
---|---|
加密算法 | NONE:代表请求参数和返回结果不需要进行加密 AES:代表请求参数和返回结果采用AES对称加密 |
请求加密模式 | NONE:代表请求参数不需要进行加密 REQBODY:代表加密请求body |
返回加密模式 | NONE:代表对返回结果不需要进行加密 RESP:代表对返回结果全加密 RESPDATA:代表仅加密返回结果的data数据 |
如果还未获取AES密钥,请先获取获取AES密钥
请求参数加密
当第三方调用业务接口时,用AES密钥对请求参数(json格式)进行加密,业务方获取加密数据后使用AES密钥进行解密。
举例:
AES密钥对请求参数进行加密:
Map<String,String> request = new HashMap<String,String>();
request.put("name", "马上消费金融");
request.put("address", "成都市天府二街");
byte[] encryptData = CryptoUtil.encrypt(JSON.toJSONString(request).getBytes(), Algorithm.AES128, Mode.ECB, Padding.PKCS5Padding, Base64Util.decode(AESKey));
String encodeString = Base64Util.encode(encryptData);
加密后的数据为:encodeString =
3OpW5bqFPhHQKigFOyBW71hnx+ZC4G6pI6OPpluXrBaNpnsdJwPNC9LfV4ERok4/xa2PxZLVC99pKRl5TdTlqrBWpYw7rxClETsJOx8t1mk=
AES密钥对请求参数进行解密:
byte[] decryptData = CryptoUtil.decrypt(Base64Util.decode(encodeString), Algorithm.AES128, Mode.ECB, Padding.PKCS5Padding, Base64Util.decode(AESKey));
String decodeString = new String(decryptData);
解密后的数据为:decodeString={"address":"成都高新天府二街","name":"马上消费金融"}
tips:详细的demo见加解密工具类中main方法的实现
返回结果加密
当业务方将结果返回给第三方时,业务方使用AES密钥对结果进行加密,第三方使用AES密钥进行解密。
注意:返回结果加密分为对全部数据进行加密和只对返回结果里面的data进行加密, 具体参数值见<返回加密模式>
举例:
AES密钥对全部结果进行加密
Map<String,String> response = new HashMap<String,String>();
response.put("code", "10000");
response.put("message", "请求成功");
response.put("data", JSON.toJSONString(request));
byte[] responseAllEncryptData = CryptoUtil.encrypt(JSON.toJSONString(response).getBytes(), Algorithm.AES128, Mode.ECB, Padding.PKCS5Padding, Base64Util.decode(keyString));
String responseAllEncodeString = Base64Util.encode(responseAllEncryptData);
全部结果加密后的数据为:responseAllEncodeString=
Zlsetd+IAfi5h/VgIOzsVIeN6kSwhk+mqn23jcJQtY5B1CpYJiyFo9KPlO1FOhKI1cCNwZkBrIV536fB1RZUQi6Rgnr715moyLWPeg/ORFeXvYmit+B3GNDZ3MxvA9uHWxCVMuH81u4ww3OB1jFvikab8Krrrn9N3cjy3kbVihM=
AES密钥对data结果进行加密
byte[] responseEncryptData = CryptoUtil.encrypt(JSON.toJSONString(request).getBytes(), Algorithm.AES128, Mode.ECB, Padding.PKCS5Padding, Base64Util.decode(keyString));
String responseEncodeString = Base64Util.encode(responseEncryptData);
对data加密后的数据为:responseEncodeString=
yaOhsaiMX/X6WdwLX5vlTwRH+Ce8lI90jSElGlUtrjStyr2EqCu10XTmukTrOrx8e3ADROnyP2ULkDCVdqqRABD4/KvNa6ry3SLkdVNM/cQ=
tips:详细的demo见加解密工具类中main方法的实现