开发者社区
社区提问意见反馈
开发者钉组织
扫描二维码
加入支付宝开发者钉组织
文档中心
凯发app官方网站的技术支持 & 案例 faq 
支付宝小程序
案例分析
sdk & demo下载
常见问题
常用工具
iot小程序
运维保障
小程序 > 支付宝小程序 > 案例分析 > 服务器端各语言实现手机号&运动步数-aes密文解密
贡献者
收藏
我的文档
设置
场景说明
本文主要说明在小程序场景下 获取会员手机号获取运动步数 时,通过前端授权后返回的 aes 加密密文在服务器端如何实现解密。 关于解密前的验签步骤,请参考 如何使用密钥
aes 解密说明
aes 解密函数:设 aes 解密函数为 d,则 p = d(k,c),其中 c 为密文,k 为密钥,p 为明文。也就是说,把密文 c 和密钥 k 作为解密函数的参数输入,则解密函数会输出明文 p。
aes 是个基本算法,实现 aes 有几种模式: ecb、cbc、cfb 、ofb、ctr 。
小程序获取会员手机号和获取运动步数返回的报文是由 aes 加密过的密文,采用 cbc 模式。
aes 密钥:即在支付宝页面上生成的 aes 密钥。
原文:res.response 为完整的报文数据。
加密算法:aes/cbc/pkcs5padding。
前端返回的报文
res.response 为完整的报文数据,示例如下(为了展示方便,报文示例均作了 json 的美化处理) 。
plain text
复制代码
{
"response": "hvdonibg0dpcofpnubk3deflqgl4=",
"sign": "oiwk7zfzmp5gx78ow==",
"sign_type": "rsa2",
"encrypt_type": "aes",
"charset": "utf-8"}
其中,各字段说明如下 。
字段名
字段说明
必填
response
报文(密文)

sign
对 response 报文的签名

sign_type
加签算法
否(应用维度配置的加签算法,小程序默认为rsa2)
encrypt_type
加密算法
否(默认为aes)
charset
验签和解密用的字符集
否(默认为utf-8)
java
验签与解密处理:无论是否涉及解密,java 服务端处理逻辑都可以按照下述逻辑处理(以下代码仅作为示例代码,生产环境使用请注意异常处理逻辑) 。 若小程序加签方式为证书方式,验签可查看 公钥证书异步通知验签
alipaysignature、alipayencrypt 使用的是 开放平台服务端sdk
请额外依赖下述三个 jar 包:



示例代码中 json 处理采用 fastjson 处理。此处一定要使用 feature.orderedfield,否则会出现参数顺序问题导致验签失败。
c#
c#和.net都可参考本示例。 可以基于自己的语言实现解密逻辑,也可以参考服务端sdk的相应语言的底层解密方法,例如:
c#服务端处理逻辑示例代码如下 :
alipaysignature、alipayencrypt 使用的是 开放平台服务端sdk
jayrock.json.conversion.jsonconvert 使用的是 jayrock-json 库中的工具类。
php
aopencrypt.php 文件中的 mcrypt_decrypt() 仅支持 7.0 以下版本。php 版本 7.0 以上 mcrypt_decrypt() 和 mcrypt_encrypt 废弃,aes 解密需要使用 openssl_decrypt 和 openssl_encrypt。 可以基于自己的语言实现解密逻辑,也可以参考 服务端sdk 的相应语言的底层解密方法,例如:
php版本7.0以下
示例代码如下:
php版本7.0以上
示例代码如下:
nodejs
示例代码
python
可以基于自己的语言实现解密逻辑,也可以参考 服务端sdk 的相应语言的底层解密方法,例如:
如果直接引用报如下错误,需要对 aes_decrypt_content 中的 iv 做 .encode("utf8") 处理。
处理后代码:
解密代码:
内容没有解决您的问题?您还可以前往 或 寻求帮助
凯发k8官方网娱乐官方 copyright © 2022 支付宝(杭州)信息技术有限公司  | icp证浙b2-20160559
该文档对你是否有帮助?
当前页面目录
网站地图