c# - 以 DER 格式导出 RSA 公钥并解密数据

标签 c# rsa bouncycastle der

我需要获取 DER 格式的 RSA 公钥字节,并将该 key 发送到 API。然后,该 API 将向我发送使用该公钥加密的内容,我需要对其进行解密。

第一个问题,C# 似乎没有能力以 DER 格式导出 RSA key 。所以看来我必须依赖像 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 文档有点奇怪。 如果有人有想法或其他方法,我会非常高兴。

最佳答案

根据评论我想出了这个解决方案:

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 !

关于c# - 以 DER 格式导出 RSA 公钥并解密数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52468125/

相关文章:

c# - 从 WindowsFormsHost 中的 Windows 窗体控件获取 WPF 窗口

c# - ASP.NET Identity 记录用户注册和上次登录时间

encryption - 在 Go 中使用 RSA 进行 key 交换的 AES 加密通信

c - 我在 C 中使用 gmp,但下一个素数不起作用?我正在尝试生成 rsa key

java - AES 128 CFB、Java/BouncyCaSTLe 与 Ruby/OpenSSL

c# - 是否可以避免将一些程序集加载到 `AppDomain` 中?

c# - 禁用 VS2015 C# 编译器自动生成 [Serializable] 属性

java - 使用 Bouncy CaSTLe 获取 RSA 公钥剩余部分

java - 如何从 byte[] 数组中恢复 RSA 公钥?

java - 使用 Java 和 BouncycaSTLe 进行 X.509 证书验证