项目场景:
`微信支付从平台证书模式修改为公钥模式后,敏感数据加密改变加密方法
解决方案:
public static string RSAEncrypt(string text)
{
try
{
string KeyPath = System.Web.Hosting.HostingEnvironment.MapPath(@"~/") + "\\Common\\WebChat\\pub_key.pem";//公钥文件保存地址
string publicKeyPem = File.ReadAllText(KeyPath);//读取公钥内容
using (var reader = new System.IO.StringReader(publicKeyPem))
{
var pemReader = new PemReader(reader);
var obj = pemReader.ReadObject();
if (obj == null)
{
Console.WriteLine("无法解析 PEM 格式的公钥,请检查公钥格式是否正确。");
return null;
}
var publicKeyParameter = (RsaKeyParameters)obj;
var rsa = DotNetUtilities.ToRSA(publicKeyParameter);
byte[] dataToEncrypt = Encoding.UTF8.GetBytes(text);
// 使用 OaepSHA1 填充模式
byte[] encryptedData = rsa.Encrypt(dataToEncrypt, RSAEncryptionPadding.OaepSHA1);
/******************重点在这里,公钥模式的加密填充模式使用的是Oaep ,在该版本使用OaepSHA1 256亲测返回null,其他还没用过
return Convert.ToBase64String(encryptedData);
}
}
catch (Exception ex)
{
Console.WriteLine($"加密过程中出现错误: {ex.Message}");
return null;
}
}