开发者社区
社区提问意见反馈
开发者钉组织
扫描二维码
加入支付宝开发者钉组织
文档中心
开放平台 
技术接入指南 > 应用开发 > 应用开发配置 > 接口内容加密方式
收藏
订阅更新
我的文档
设置
简介
aes 密钥是什么?
高级加密标准(英语:advanced encryption standard,缩写:aes),是目前对称密钥加密中比较通用的一种加密方式,该加密方式加解密的密钥即为 aes 密钥。
aes 密钥有什么用?
支付宝开放平台中所有使用 bizcontent 方式入参的 openapi 均支持对接口的请求内容和响应内容进行 aes 加密。
加密后,在网络上传输的接口报文内容将会由明文内容变为密文内容,可以大幅提升接口内容传输的安全性。
注意:若接口无 bizcontent 传参则无法使用 aes 密钥加密,否则会报错 当前 api 不支持加密请求。如:alipay.user.info.share(支付宝会员授权信息查询接口)未使用 bizcontent 传参则无法使用 aes 密钥加密。
java
复制代码
alipayclient alipayclient = new defaultalipayclient("https://openapi.alipay.com/gateway.do","app_id","your private_key","json","gbk","alipay_public_key","rsa2");
alipayuserinfosharerequest request = new alipayuserinfosharerequest();
alipayuserinfoshareresponse response = alipayclient.execute(request,accesstoken);
if(response.issuccess()){
system.out.println("调用成功");
} else {
system.out.println("调用失败");
}
aes 密钥与 rsa 密钥的关系
aes&rsa.png

aes 密钥是对接口请求和响应内容进行加密,密文无法被第三方识别,从而防止接口传输数据泄露。
rsa 密钥是对接口请求和响应内容进行签名,开发者和支付宝开放平台分别加签验签,以确认接口传输的内容没有被篡改。不论接口内容是明文还是密文,rsa 均可正常签名。
开发者可对请求参数先做 aes 加密,然后对密文进行 rsa 签名。
使用说明
配置 aes 密钥
1登录 进入应用详情页,在 开发设置 页中找到 接口内容加密方式(下文以 小程序应用 为例)。 注意:
其它应用类型路径可能与此不同,请开发者自行在应用详情页找到 开发设置 进行配置。
还可在 账户中心 > 密钥管理 > 开放平台密钥 > 找到需配置 aes 加密方式的应用,点击 设置 进行配置。
image.png

2点击 设置 并通过支付密码/短信验证码完成校验后,点击 生成新密钥 即可为应用生成 aes 密钥。
生成密钥.png

更新密钥
1进入应用详情页,在 设置 > 开发设置 页中找到 接口内容加密方式注意:
其它应用类型路径可能与此不同,请开发者自行在应用详情页找到 开发设置 进行配置。
还可在 账户中心 > 密钥管理 > 开放平台密钥 > 找到需配置 aes 加密方式的应用,点击 设置 进行配置。
2点击 查看 并通过支付密码/短信验证码完成校验后,在弹窗中点击 重新生成密钥 即可更新当前 aes 密钥; 注意:aes 密钥一旦变更,新密钥立即启用,同时原密钥将立即失效。请确保在切换密钥过程中,涉及到的相关业务能够做容错处理。
更新密钥.png

使用 sdk 加解密
名词解释
aes 密钥:即在支付宝页面上生成的 aes 密钥。
原文:biz_content 的值。
字符集:加密原文会按该字符集转换为对应的编码(请保证和签名过程一致的字符集)。
加密算法:aes/cbc/pkcs5padding。
使用 sdk 加密
开发者使用 sdk 调用接口如需使用 aes 密钥加密 bizcontent 内容,仅需按以下步骤改造接口调用方式:
1使用以下构造方法构造 alipayclient :com.alipay.api.defaultalipayclient#defaultalipayclient(string, string, string, string, string, string, string, string, string),最后两个参数分别传递上文 使用说明 中生成的 aes 密钥,和加密算法 aes(固定值)。
2对于每一个接口对应的请求类,调用它的 request.setneedencrypt(boolean) 方法,设置为 true 即可。
使用 sdk 解密
aes 解密函数
aes 是一个基本算法,实现 aes 算法有 ecb、cbc、cfb 、 ofb 和 ctr 几种模式。获取会员手机号、运动数据采用 cbc 模式。
设 aes 解密函数为 d,则 p = d(k,c),其中 c 为密文,k 为密钥,p 为明文。也就是说,把密文 c 和密钥 k 作为解密函数的参数输入,则解密函数会输出明文 p。
前端返回的报文
res.response 为完整的报文数据。为了展示方便,报文示例均作了 json 格式化。
示例代码
参数说明
字段名
必填
字段说明
response

报文(密文)
sign

对 response 报文的签名
sign_type

加签算法。应用维度配置的加签算法,小程序默认为 rsa2。
encrypt_type

加密算法。默认为 aes。
charset

验签和解密用的字符集。默认为 utf-8
java 解密示例
验签与解密处理:无论是否涉及解密,java 后端处理逻辑都可以按照下述逻辑处理(以下代码仅作为示例,生产环境使用请注意异常处理逻辑)。
注意:
alipaysignature、alipayencrypt 使用的是 开放平台服务端 sdk
json 处理采用 fastjson 处理。且必须使用 feature.orderedfield,否则会出现参数顺序问题导致验签失败。
请额外依赖下述三个 jar 包:



若应用使用证书模式加签,验签步骤可查看 证书模式签名及验签
c# 解密示例
使用 sdk 的 c#后端示例如下,开发者也可参考服务端 sdk 的底层解密方法,如 alipayencrypt.cs 文件的 public static string aesdencrypt(string encryptkey, string bizcontent, string charset)自行实现解密操作。
注意:
alipaysignature、alipayencrypt 使用的是
jayrock.json.conversion.jsonconvert 使用的是 jayrock-json 库中的工具类。
php 解密示例
php 版本b7 .0 以上进行 aes 解密需要使用 openssl_decryptopenssl_encrypt
php 版本 7 .0 以下进行 aes 解密需要使用 mcrypt_decrypt()
php 版本 7.0 以下
示例代码:
php 版本 7.0 以上
示例代码:
开发者可以基于自己的语言实现解密逻辑,也可以参考服务端 sdk 的相应语言的底层解密方法,例如:
nodejs 解密示例
示例代码:
python 解密示例
示例代码:
开发者可以基于自己的语言实现解密逻辑,也可以参考服务端 sdk 的相应语言的底层解密方法,例如:
注意:若直接引用报如下错误,需要对 aes_decrypt_content 中的 iv.encode("utf8") 处理。
错误.png

处理后示例代码:
自行实现 aes 密钥加解密
请求报文加密
开放平台支持开发者自行对请求参数做 aes 加密然后再做 rsa 签名提交请求。
下文为 aes 加密 java 处理逻辑示例,其它语言基本的加密逻辑一样,需要注意的是对加密后得到字节数组需要先做 base64 编码,然后再新建字符串(由于 base64 后的字节一定是 ascii 范围内,所以最后一步 new string 的时候无需指定字符集)。
注意:若使用 php,可能需要自行安装用于加密的 php 扩展。
响应报文解密
如开发者对请求参数做了 aes 加密,针对支付宝回复报文,开发者需要先验签,再解密。
若支付宝对回复报文进行了加密,开发者得到的支付宝回复报文会和之前有细微差别。判断报文是否加密以及密文的获取,当报文格式是 xml 和 json 时方式不同,具体见下(以下报文为方便展示均做了格式化)。
xml 格式
若存在 xml 根节点的第一个子节点为 response_encrypted,后面紧跟着 sign 节点,则该报文为加密的报文,密文存放在 response_encrypted 中。作为对比可以查看下图中 加密前 的内容。
xml.png

对验签的影响:验签取原文的逻辑和未加密时一致,取的是 之间的内容。若之前取验签原文的逻辑不是通过这种方式取的话,可能会导致验证支付宝签名时失败。
json 格式
识别该结果是密文的方式是 response 后的结果是 字符串(双引号开头)而不是 json 对象(大括号开头),密文为引号内的内容。作为对比可以查看下图中 加密前 的内容。
json.png

对验签的影响:验签的原文和原来一致,是 xxx_responsesign 之间的内容(包括双引号)。若之前取验签原文的逻辑不是通过这种方式取的话,可能会导致验证支付宝签名时失败。
aes 解密 java 示例代码
常见问题
设置 aes 密钥后,如何取消?
配置后不支持删除,只能更新修改。若不使用,可以不做相关操作,并不影响调用接口,后续需要的时候再使用 aes 密钥加解密即可。
内容没有解决您的问题?您还可以前往 或 寻求帮助
凯发k8官方网娱乐官方 copyright © 2022 支付宝(杭州)信息技术有限公司  | icp证浙b2-20160559
该文档对你是否有帮助?
当前页面目录
网站地图