小程序
小游戏
企业微信
微信支付
扫描小程序码分享
https://api.mch.weixin.qq.com/v3/ecommerce/applyments/ 这个接口中头部已加入了平台证书
.net core下加密敏感数据用的这个方法
图片加密上传接口调用没问题,
之前申请接口我没加平台证书,报错后我加上了,但是现在提示我平台私钥解密失败,请问我头部加的是平台证书号,这个跟平台私钥解密有什么关系呢
3 个回答
加粗
标红
插入代码
插入链接
插入图片
上传视频
兄嘚,不要用微信官方提供的DEMO,那是有问题的。用这个:
你好,麻烦通过点击下方“反馈信息”按钮,提供出现问题的。
1、加密敏感数据用的公钥信息不正确
2、使用的平台证书不正确,可以查看对应的证书序列号与“平台证书接口”返回的是否一致
3、加密方式不正确,详情可以参考https://wechatpay-api.gitbook.io/wechatpay-api-v3/qian-ming-zhi-nan-1/min-gan-xin-xi-jia-mi
4、公钥信息获取请使用对应语种的函数进行,详情可以参考https://wechatpay-api.gitbook.io/wechatpay-api-v3/qian-ming-zhi-nan-1/min-gan-xin-xi-jia-mi
/// <summary>
/// RSA公钥加密(支持Linux,不支持win)
/// 最终提交请求时,需对敏感信息加密,如身份证、银行卡号。
/// 加密算法是RSA,使用从接口下载到的公钥进行加密,非后台下载到的私钥。
/// </summary>
/// <param name="text">要加密的明文</param>
/// <param name="publicKey"> -----BEGIN CERTIFICATE----- 开头的string </param>
/// <returns></returns>
public static string EncryptFOAEP(string text, string publicKey)
{
var key_bs = Convert.FromBase64String(publicKey);
using (var x509 = new X509Certificate2(key_bs))
using (var rsa = (System.Security.Cryptography.RSAOpenSsl)x509.PublicKey.Key)
var buff = rsa.Encrypt(Encoding.UTF8.GetBytes(text), RSAEncryptionPadding.OaepSHA1);
return Convert.ToBase64String(buff);
}
/// RSA私钥解密
/// <param name="text"></param>
/// <param name="privateKey">私钥字符串</param>
public static string DecryptFOAEP(string text, string privateKey)
var key_bs = Convert.FromBase64String(privateKey);
var text_bs = Convert.FromBase64String(text);
RsaPrivateCrtKeyParameters privateKeyParam = (RsaPrivateCrtKeyParameters)PrivateKeyFactory.CreateKey(key_bs);
var c= CipherUtilities.GetCipher("RSA/ECB/OAEPWithSHA-1AndMGF1Padding");
c.Init(false,new ParametersWithRandom(privateKeyParam));
var result_bs= c.DoFinal(text_bs);
return Encoding.UTF8.GetString(result_bs);
这个错误提示的解释:你用平台证书加密的东西,微信支付服务端用你的平台证书的私钥解密失败,微信支付端从你的平台证书号索引得到平台证书的私钥。
关注后,可在微信内接收相应的重要提醒。
请使用微信扫描二维码关注 “微信开放社区” 公众号
兄嘚,不要用微信官方提供的DEMO,那是有问题的。用这个:
1、加密敏感数据用的公钥信息不正确
2、使用的平台证书不正确,可以查看对应的证书序列号与“平台证书接口”返回的是否一致
3、加密方式不正确,详情可以参考https://wechatpay-api.gitbook.io/wechatpay-api-v3/qian-ming-zhi-nan-1/min-gan-xin-xi-jia-mi
4、公钥信息获取请使用对应语种的函数进行,详情可以参考https://wechatpay-api.gitbook.io/wechatpay-api-v3/qian-ming-zhi-nan-1/min-gan-xin-xi-jia-mi
https://wechatpay-api.gitbook.io/wechatpay-api-v3/qian-ming-zhi-nan-1/min-gan-xin-xi-jia-mi#jia-mi-shi-li
/// <summary>
/// RSA公钥加密(支持Linux,不支持win)
/// 最终提交请求时,需对敏感信息加密,如身份证、银行卡号。
/// 加密算法是RSA,使用从接口下载到的公钥进行加密,非后台下载到的私钥。
/// </summary>
/// <param name="text">要加密的明文</param>
/// <param name="publicKey"> -----BEGIN CERTIFICATE----- 开头的string </param>
/// <returns></returns>
public static string EncryptFOAEP(string text, string publicKey)
{
var key_bs = Convert.FromBase64String(publicKey);
using (var x509 = new X509Certificate2(key_bs))
{
using (var rsa = (System.Security.Cryptography.RSAOpenSsl)x509.PublicKey.Key)
{
var buff = rsa.Encrypt(Encoding.UTF8.GetBytes(text), RSAEncryptionPadding.OaepSHA1);
return Convert.ToBase64String(buff);
}
}
}
/// <summary>
/// RSA私钥解密
/// </summary>
/// <param name="text"></param>
/// <param name="privateKey">私钥字符串</param>
/// <returns></returns>
public static string DecryptFOAEP(string text, string privateKey)
{
var key_bs = Convert.FromBase64String(privateKey);
var text_bs = Convert.FromBase64String(text);
RsaPrivateCrtKeyParameters privateKeyParam = (RsaPrivateCrtKeyParameters)PrivateKeyFactory.CreateKey(key_bs);
var c= CipherUtilities.GetCipher("RSA/ECB/OAEPWithSHA-1AndMGF1Padding");
c.Init(false,new ParametersWithRandom(privateKeyParam));
var result_bs= c.DoFinal(text_bs);
return Encoding.UTF8.GetString(result_bs);
}
这个错误提示的解释:你用平台证书加密的东西,微信支付服务端用你的平台证书的私钥解密失败,微信支付端从你的平台证书号索引得到平台证书的私钥。
AEAD_AES_256_GCM 解密算法实现