首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将openssl公钥导入C# RSACryptoServiceProvider

将openssl公钥导入C# RSACryptoServiceProvider
EN

Stack Overflow用户
提问于 2016-04-22 20:48:13
回答 2查看 2.1K关注 0票数 1

我在c++中创建服务器端程序,用openssl库创建RSA公钥和私钥,然后通过网络为客户端分发公钥。在客户端,我编写了c#程序,首先获取公钥,然后加密数据。但是我不能将公钥添加到RSACryptoServiceProvider中。

是否有将RSA公钥导入RSACryptoServiceProvider的方法?

--开始使用RSA公钥- MIIBCAKCAQEAsgVkBAQPdtRtICOqWdZ0ZiMAb9UvUX0BaxANN22bL5RzTJAL+PmG QKaA61B1m0NPOjdIIXMwkaAzXOmzuNwKm2Ugb8jO15B6ovAhe73jAoltFFdi10Te zCJgT8/xLAWt1mOXCAK9vD4Pv5LMN76BF+YjEVvylQ3l87255ElZrP4UluCGj0U3 uczW8+Cqao3QoL6xSxPU9jSK0FT/OhAL312cAXYbnaiJH+wAf1kkv4ez28XAlFId MlCmh2n8YSuxk1GdOXaps8IoluDzmHeQ8vk2quQMPpFXzfCayBoPm9lVPOjOQkAH 8ClJda0Uy052N5aE0BuyX1KRxOSdRRKk9wIBAw==

-最终RSA公钥

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-23 01:44:32

您可以使用BouncyCastle来完成这个任务,不幸的是,这是解决这个问题的唯一方法之一。

代码语言:javascript
复制
PemReader reader = new PemReader(new StreamReader(File.Open(file, FileMode.Open)));
AsymmetricCipherKeyPair = (AsymmetricCipherKeyPair)reader.ReadObject();
reader.Reader.Close();

这段代码没有经过测试,所以其中一些方法名可能会被忽略。然后可以使用DotNetUtilities类中的静态方法将其转换为RSACryptoServiceProvider

票数 1
EN

Stack Overflow用户

发布于 2016-04-23 21:00:43

这是一个示例代码,演示如何在RSACryptoServiceProvider中c#中添加RSA公钥。

代码语言:javascript
复制
public Stream GenerateStreamFromString(string s)
{
     MemoryStream stream = new MemoryStream();
     StreamWriter writer = new StreamWriter(stream);
     writer.Write(s);
     writer.Flush();
     stream.Position = 0;
     return stream;
}

string publicKey = "-----BEGIN RSA PUBLIC KEY-----\nMIIBCAKCAQEAoNhWLaL11Zy4L6Cp2IDFv2JGnPkoRnFrKTy5b23uszzbSammdIwi\n6Wtr/7Zg3wmqlwt/yhH4F6rwSysB04xvMnWjuRsw2Kz4u7FHMPlgrIObGDFqcEms\nllNTA8xSWh/+TPfxWdAN5bpUwLYo6Mizl+VStL4CtVQFS8/mQSUnCju3csfxNGlk\nPQdbwZWB/5DdswrhkUcob8wl3bCCZCz3zWzMNJFTgTEiZQr+qTtuY7ST+fmpO33r\nDJoboysiGPKUkQixKcG2s1jJJkQircAHkmiQPS6PlUapNahFNaPa3rh1zR4l5NN6\nxWudPYQhZ8VvD4C8eT2bfrUlsikAyXIX4QIBAw==\n-----END RSA PUBLIC KEY-----\n"
using (Stream stream = GenerateStreamFromString(publicKey))
{

      PemReader pemReader = new PemReader(new StreamReader(stream));
      AsymmetricKeyParameter publicKey = (AsymmetricKeyParameter)pemReader.ReadObject();
      pemReader.Reader.Close();
      Org.BouncyCastle.Crypto.Parameters.RsaKeyParameters rsaPub = (Org.BouncyCastle.Crypto.Parameters.RsaKeyParameters)publicKey;

      RSAParameters RSAKeyInfo = Org.BouncyCastle.Security.DotNetUtilities.ToRSAParameters(rsaPub);

      RSACryptoServiceProvider RSA = new RSACryptoServiceProvider(2048);
      RSA.ImportParameters(RSAKeyInfo);

      byte[] encryptedData = RSA.Encrypt(plainText, true);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36803080

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档