.net 5 linux 下的微信支付 ——System.Security.Cryptography无法兼容linux的问题
.net 带的System.Security.Cryptography加密解密是不兼容其他平台的,只能在windows下运行。
微信支付的官方文档里,给的示例就完全按照这个写的,在windows开发环境上运行没问题,传到服务器就立刻报错。
在.net5大喊全面兼容,docker这么流行的状况下,有点让人不爽。
废话不多说了,给出解决方案。
先看
https://docs.microsoft.com/zh-cn/dotnet/api/system.security.cryptography.rsa.create?view=net-5.0
https://docs.microsoft.com/zh-cn/dotnet/api/system.security.cryptography.rsa.importpkcs8privatekey?view=netcore-3.0
腾讯官方给的示例代码
byte[] keyData = Convert.FromBase64String(privateKey);
using (CngKey cngKey = CngKey.Import(keyData, CngKeyBlobFormat.Pkcs8PrivateBlob)) using (RSACng rsa = new RSACng(cngKey)) { byte[] data = System.Text.Encoding.UTF8.GetBytes(message); return Convert.ToBase64String(rsa.SignData(data, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1)); }
使用RSA.create的代码
byte[] keyData = Convert.FromBase64String(privateKey); int len = keyData.Length; RSA.ImportPkcs8PrivateKey(keyData, out len); byte[] data = System.Text.Encoding.UTF8.GetBytes(message); return Convert.ToBase64String(RSA.SignData(data, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1));
测试了一下,通过。

浙公网安备 33010602011771号