更新时间:2022-11-21 11:16:42贡献者收藏我的文档设置返回文档场景说明本文主要说明在小程序场景下 获取会员手机号 和 获取运动步数 时,通过前端授权后返回的 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复制代码9123456{ "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 库中的工具类。phpaopencrypt.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") 处理。 处理后代码:解密代码: