继之前给大家介绍了 V3 加密解密的方法之后,今天给大家介绍下支付宝的 AES 加密。
注意:以下说明均在使用支付宝 SDK 集成的基础上,未使用支付宝 SDK 的小伙伴要使用的话老老实实从 AES 加密原理开始研究吧。
什么是AES密钥
AES 是一种高级加密标准(英语:Advanced Encryption Standard,缩写:AES),是目前对称密钥加密中比较通用的一种加密方式,该加密方式加密/解密的密钥即为 AES 密钥。
什么情况会用到AES加密
在支付宝接口对接中,强制要求使用的 AES 加密的场景并不多,主要是用在前后端敏感信息(如身份证、手机号等)传输的时候,对敏感信息进行加密传输。
非敏感信息传输场景下也可以使用 AES 加密方式对请求数据进行加密传输,以保证接口内容在传输过程中的安全性。
不过支付宝的 AES 加密仅仅是对 bizContent 的请求内容进行加密,如果你请求的接口没有 bizContent 的话,那就没有办法加密了,强行加密只会报错 [当前API不支持加密请求]。
AES密钥如何加密
AES 密钥在使用过程中主要分为 加密 和 解密 两个部分,下面我们就来一一说明下这如何实现。
如何配置 AES 密钥
在加密和解密之前,最重要的一步就是先配置 AES 密钥。
支付宝在每个应用下都提供了 AES 密钥的配置入口。
配置路径:支付宝开放平台 -> 对应应用详情 -> 开发设置 -> 接口内容加密方式:
通过短信/密码验证之后,就可以获取到这一串 AES 密钥了:
如何加密
支付宝的 SDK 提供了加密的封装方法,只要在初始化的方法中传入 AES 密钥,并且在代码中加入 request.setNeedEncrypt(true) 就可以,下面以 alipay.trade.pay 接口为例:
public class AlipayTradePay {
public static void main(String[] args) throws AlipayApiException {
AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do","app_id","your private_key","json","GBK","alipay_public_key","RSA2","AES密钥值","AES");
AlipayTradePayRequest request = new AlipayTradePayRequest();
JSONObject Content = new JSONObject() ;
Content.put("out_trade_no", "20200612000001");
Content.put("subject", "subject");
Content.put("total_amount", "0.01");
Content.put("scene", "bar_code");
Content.put("auth_code", "28763443825664394");
Content.put("product_code", "FACE_TO_FACE_PAYMENT");
// 封装请求参数到biz_content
request.setBizContent(Content.toString());
//将biz_content的内容进行加密
request.setNeedEncrypt(true);
AlipayTradePayResponse response = alipayClient.execute(request);
/** 获取接口调用结果 **/
System.out.println(response.getBody());
}
}