2012-12-26 88 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

相關問題