数据传输加密

第三方调用业务接口的时候,由于某些业务的特殊性,需要对请求参数进行加密传输,业务接口返回的数据也会进行加密传输,

注意:当前场景下业务的请求参数全部以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方法的实现

results matching ""

    No results matching ""