c# - 如何在 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()));
解决方案
我想你必须使用:
- 用于解密加密数据或签署数据的私钥,以及
- 用于加密数据或验证签名的公钥。
推荐阅读
- python - 如果字符串在 Python 3 中是 unicode,为什么需要 unicode 文字?
- reactjs - 将长字符串转换为数字
- javascript - 仅当页面加载到rails应用程序上时,如何运行webpacker编译的javascript?
- javascript - Javascript - 如何简化一系列字符以进行转换
- machine-learning - 无法用 csv 数据提供我的 convolution1d
- oracle - 如何使用 sqlldr 加载数据
- tensorflow - 保存机器学习 keras 模型时出现问题
- c# - 证书链究竟是如何构建的?
- c++ - 如何在 C++ 中利用 C 风格的可变参数函数?
- elasticsearch - 状态索引中的元数据未更新