首页 > 解决方案 > 如何在 C# 中使用 RSA 私钥加密数据

问题描述

我正在使用用 Java 开发的第三方 API。它需要使用给定的 RSA 私钥加密数据以生成签名。但是 'RSACryptoServiceProvider'在 C# 中只允许通过公钥加密。

到目前为止,我已经尝试使用“BouncyCastle”用私钥加密数据。但是 API 响应有错误。它说,'verify signature failed'.

热修复这个,有什么想法吗?

顺便说一句:我使用下面的代码将 Java 私钥转换为 C# xml 私钥。这正确吗?

RsaPrivateCrtKeyParameters privateKeyParam = (RsaPrivateCrtKeyParameters)PrivateKeyFactory.CreateKey(Convert.FromBase64String(priKey));
return string.Format("<RSAKeyValue><Modulus>{0}</Modulus><Exponent>{1}</Exponent><P>{2}</P><Q>{3}</Q><DP>{4}</DP><DQ>{5}</DQ><InverseQ>{6}</InverseQ><D>{7}</D></RSAKeyValue>",
    Convert.ToBase64String(privateKeyParam.Modulus.ToByteArrayUnsigned()),
    Convert.ToBase64String(privateKeyParam.PublicExponent.ToByteArrayUnsigned()),
    Convert.ToBase64String(privateKeyParam.P.ToByteArrayUnsigned()),
    Convert.ToBase64String(privateKeyParam.Q.ToByteArrayUnsigned()),
    Convert.ToBase64String(privateKeyParam.DP.ToByteArrayUnsigned()),
    Convert.ToBase64String(privateKeyParam.DQ.ToByteArrayUnsigned()),
    Convert.ToBase64String(privateKeyParam.QInv.ToByteArrayUnsigned()),
    Convert.ToBase64String(privateKeyParam.Exponent.ToByteArrayUnsigned()));

标签: c#.netencryptionprivate-key

解决方案


我想你必须使用:

  • 用于解密加密数据或签署数据的私钥,以及
  • 用于加密数据或验证签名的公钥。

推荐阅读