.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));

测试了一下,通过。

posted @ 2021-03-11 17:42  认真的老鱼儿  阅读(620)  评论(1)    收藏  举报