2012-12-26 58 views
4

我正在尝试使用公钥加密与客户端和服务器进行通信。服务器应该生成一个1024位公钥并将其发送到客户端,客户端将使用该密钥将加密数据发送回服务器。到目前为止,我已经初始化的RSACryptoServiceProvider本:从RSACryptoServiceProvider获取公钥?

RSACryptoServiceProvider rsaEncryption = new RSACryptoServiceProvider(1024); 

现在,我知道,我可以使用ExportParameters获得来自的RSACryptoServiceProvider指数和模量。但是,我想知道,如何使用此数据将公钥发送回客户端(也将使用RSACryptoServiceProvider),以及客户如何使用此数据加密某些内容以发回给我? 或者我这样做完全错了吗?

回答

15

你的逻辑看起来不错,看起来你只需要一些示例代码。

using System; 
    using System.Security.Cryptography; 
    using System.Text; 

    namespace RSA 
    { 
     class Program 
     { 
      static void Main(string[] args) 
      { 
       try 
       { 
        var rsaServer = new RSACryptoServiceProvider(1024); 
        var publicKeyXml = rsaServer.ToXmlString(false); 

        var rsaClient = new RSACryptoServiceProvider(1024); 
        rsaClient.FromXmlString(publicKeyXml); 

        var data = Encoding.UTF8.GetBytes("Data To Be Encrypted"); 

        var encryptedData = rsaClient.Encrypt(data, false); 
        var decryptedData = rsaServer.Decrypt(encryptedData, false); 

        Console.WriteLine(Encoding.UTF8.GetString(decryptedData)); 

        Console.WriteLine("OK"); 
       } 
       catch (Exception ex) 
       { 
        Console.WriteLine(ex.Message); 
       } 
       Console.Read(); 
      } 
     } 
    } 
0

1 - 使用> = 2048位,在你的钥匙被直到年〜2025年的保护。

以上是来自2012年,但我试图为Putty/Linux服务器连接创建ssh-rsa密钥时遇到了它。

我刚刚解决了以适当格式创建公共ssh-rsa键的类似问题,以匹配PuttyGen。

对于Microsoft .NET 的RSACryptoServiceProvider它看起来像这样

  RSACryptoServiceProvider RSA = new RSACryptoServiceProvider(3072); 
      byte[] sshrsa_bytes = Encoding.Default.GetBytes("ssh-rsa"); 
      byte[] n = RSA.ExportParameters(false).Modulus; 
      byte[] e = RSA.ExportParameters(false).Exponent; 
      string buffer64; 
      using (MemoryStream ms = new MemoryStream()) 
      { 
       ms.Write(ToBytes(sshrsa_bytes.Length), 0, 4); 
       ms.Write(sshrsa_bytes, 0, sshrsa_bytes.Length); 
       ms.Write(ToBytes(e.Length), 0, 4); 
       ms.Write(e, 0, e.Length); 
       ms.Write(ToBytes(n.Length+1), 0, 4); //Remove the +1 if not Emulating Putty Gen 
       ms.Write(new byte[] { 0 }, 0, 1); //Add a 0 to Emulate PuttyGen (remove it not emulating) 
       ms.Write(n, 0, n.Length); 
       ms.Flush(); 
       buffer64 = Convert.ToBase64String(ms.ToArray()); 
      } 

      string pubssh = string.Format("ssh-rsa {0} generated-key", buffer64); 

你可以看到我的我用于测试&腻子创源代码的链接私钥https://www.cameronmoten.com/2017/12/21/rsacryptoserviceprovider-create-a-ssh-rsa-public-key/

我在微软工作,但这不是微软的个人答案。

原贴的BouncyCastle的(Link

+0

你不必提你在哪里工作,因为它没有任何关系的问题。除非另有说明,否则任何答案都是私人的。 – Hexfire

相关问题