我需要以DER格式获取RSA公钥的字节,然后将此密钥发送到API。然后,该API会向我发送使用此公钥加密的内容,我需要对其解密。
第一个问题,似乎C#没有能力以DER格式导出RSA密钥。因此,似乎我必须依靠BouncyCastle之类的第三方软件包。我还找到了一种使用此软件包以DER格式生成和导出我的公钥的方法:
var generator = new RsaKeyPairGenerator();
generator.Init(new KeyGenerationParameters(new SecureRandom(), 2048));
var keyPair = generator.GenerateKeyPair();
var publicKeyParam = (RsaKeyParameters)keyPair.Public;
var publicKey = SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(publicKeyParam).GetDerEncoded();
所以现在我只需要对这些字节进行Base64编码并将其发送到API,API就会很高兴。但是现在我一直在试图弄清楚如何解密收到的数据。首先,我解码了base64字符串,现在我被数据的字节卡住了。我可以从BouncyCastle的“事物”中获取私钥,但是我似乎无法正确地将其转换为RsaCryptoServiceProvider,并且BouncyCastle文档有点奇怪。 如果有人有想法或其他方法,我会很高兴。
答案 0 :(得分:1)
基于我提出的解决方案的评论:
var rsa = new RSACryptoServiceProvider(2048); // my rsa to decrypt and encrypt data
var publicKeyParam = DotNetUtilities.GetRsaPublicKey(rsa.ExportParameters(false));
var publicKey = SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(publicKeyParam).GetDerEncoded(); // my exported public key in DER format
非常感谢James K Polk!