使用场景
- 使用接口时,业务参数需要通过本文指定的加密形式进行加密传输,接口回调结果亦按照相同的加密方式反馈。
- 加密方法为Base64编码,使用CBC模式256位的AES加密
- 需要使用平台分配给商户的秘钥AccessKeySecret,一个IV向量值ivStr,向量值可增加加密算法的强度
- 参与加密的JSON字符串不能包含换行符(/n),空格(/t),涉及到url的参数请注意不要包含转义字符,否则解密可能发生异常
- 加密生成的字符格式默认使用UTF-8,先做Base64.encode,然后再做URLEncoder.encode,最终得到加密字符串
- 加密向量值 iv 默认为:0000000000000000(16个阿拉伯数字0)
示例
- 加密代码示例
try {
//指定加密计算方式
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
String jsonParam = WorkerSassVerifyUtil.buildMapToSign(params);
byte[] raw = secret.getBytes();
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
IvParameterSpec iv = new IvParameterSpec(ivStr.getBytes());
cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
//获取加密字符
byte[] encrypted = cipher.doFinal(jsonParam.getBytes("UTF-8"));
//先进行Base64Encode
String enString = Base64.encode(encrypted);
//最后URLEncode
return URLEncoder.encode(enString);
} catch (Exception e) {
System.out.println("AES加密异常" + e);
}
return "";
- 解密代码示例
try {
byte[] raw = secret.getBytes("ASCII");
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
IvParameterSpec iv = new IvParameterSpec(ivStr.getBytes());
cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
String tempStr = URLDecoder.decode(aesData);
byte[] encrypted1 = Base64.decode(tempStr);
byte[] original = cipher.doFinal(encrypted1);
String jsonParam = new String(original, "UTF-8");
return jsonParam;
} catch (Exception e) {
System.out.println("AES解密异常" + e);
}
return "";
单笔提现上报接口bizAESContent加密示例
{"notifyUrl":"https://api.workersaas.com/api/pay/notifyTest","taxFundId":"0","month":"2020-07","outerTradeNo":"f2cb9c91f3c3637fb41ea5b647836dfe","empName":"aloqog7355","empPhone":"18801270000","licenseType":"ID_CARD","licenseId":"990809198508017900","settleType":"alipay","payAccount":"aloqog7355@sandbox.com","positionName":"音视频服务费","payAmount":10.01}
-
加密秘钥appSecret : 18a9722d3bc84812830b2306b72e4605
-
IV向量值ivStr: 0000000000000000
-
加密后的字符串
90BCnLDJ9czbEEusRowegeKj02I9RGGNOZnq7nmh3rXmD3EQVZm%2BIbC%2ByfY%2FQyuVoW4uLkwu%2FJssN0PVsk9goS1YjIhqdUsmbec6NDaB5mPwUbOQpEMpt1RFaDTvv0Nr9yfwRNmusn%2FveAhgq1MmFw%2BUQxOvK7FTaJV3OzR5UXZN4WRWfCGSfSDBQtZfAtlOd2WAy5TPCBsvXsTcs55XcuJ%2BmyI2Lf4QlrBG%2FvkyXIhhOebbiqsuapy7uV7gtBzN2%2BzARc2mseWc0mky9mJVNNe9BJcAdRaQC4NPPZVGkhMQOvqbqELUY0mX%2Fn%2FMOITc%2BT9wiux8ZPvM041JOmHKZmD2FQ6Q1AWF1NSTlPpJ08PmSyGh7Bk9fS3lWnnVcEBO0utGAqJHfb28nJJ%2Bit9ox8pelqGieS2vDA22kcfmdHAtZ%2FNakHbb1STU7pkTn5q3U2IPqVTJBp%2BAYwKrLpAbDvaMs7ZK71jWgtjUxnaNZDw%3D