2016-07-28 2 views
0

У меня проблема с тем, как я могу найти закрытый ключ от сервера Windows 2008.Расшифровка сообщения с закрытым ключом RSA

первый я зашифровать данные с помощью открытого ключа, который я извлек его из URL HTTPS так:

public static string Encrypt(string Data) 
    { 
     try 
     { 
      var Crypto = new RSACryptoServiceProvider(2048); 
      var RsaKeyInfo = Crypto.ExportParameters(false); 
      RsaKeyInfo.Modulus = PublicKeyByte(); 
      Crypto.ImportParameters(RsaKeyInfo); 

      var bytesData = Encoding.Unicode.GetBytes(Data); 
      var bytesCypherText = Crypto.Encrypt(bytesData, false); 
      var cypherText = Convert.ToBase64String(bytesCypherText); 

      return cypherText; 
     } 
     catch (Exception ex) 
     { 

      return null; 
     } 
    } 
    private static byte[] PublicKeyByte() 
    { 
     Uri u = new Uri("https:\\domain.com"); 
     ServicePoint sp = ServicePointManager.FindServicePoint(u); 

     string groupName = Guid.NewGuid().ToString(); 
     HttpWebRequest req = HttpWebRequest.Create(u) as HttpWebRequest; 
     req.ConnectionGroupName = groupName; 

     using (WebResponse resp = req.GetResponse()) 
     { 

     } 
     sp.CloseConnectionGroup(groupName); 
     return sp.Certificate.GetPublicKey(); ; 
    } 

Теперь я не знаю, как извлечь секретный ключ в C# для дешифрования сообщения? и я хочу, чтобы узнать больше информации об этом

спасибо,

+1

Вы не можете извлечь закрытый ключ с сервера, потому что это в значительной степени побеждает цель использования этой технологии. Если у вас есть доступ к серверу, вы можете получить шифрованный текст и расшифровать сообщение с помощью закрытого ключа, который хранится локально на этом сервере. – Glubus

+0

Да, у меня есть доступ к серверу, и я хочу извлечь закрытый ключ локально, я хочу автоматически читать закрытый ключ с моей программой на этом сервере. –

+0

Итак, что же такое проблема? Ваш ключ должен храниться где-то вроде C: \ Users \ \ .ssh \, если вы используете Windows. Просто прочитайте файл через свой сервер (вы сказали, что у вас есть доступ к серверу, поэтому вы должны иметь возможность программно добавить это). – Glubus

ответ

0

я решить это путем извлечения файла сертификата .PFX и им с помощью System.Security.Cryptography.X509Certificates для шифрования и дешифрования:

public static string Encrypt(string data) 
    { 
     try 
     { 
      var path = @"certificate.pfx"; 
      var password = "test"; 
      var collection = new X509Certificate2Collection(); 
      collection.Import(path, password, X509KeyStorageFlags.PersistKeySet); 
      var certificate = collection[0]; 
      var publicKey = certificate.PublicKey.Key as RSACryptoServiceProvider; 
      var bytesData = Convert.FromBase64String(data); 
      var encryptedData = publicKey.Encrypt(bytesData, false); 
      var cypherText = Convert.ToBase64String(encryptedData); 

      return cypherText; 
     } 
     catch (Exception ex) 
     { 

      return null; 
     } 
    } 
    public static string Decrypt(string data) 
    { 
     try 
     { 
      var path = @"certificate.pfx"; 
      var password = "test"; 
      var collection = new X509Certificate2Collection(); 
      collection.Import(path, password, X509KeyStorageFlags.PersistKeySet); 
      var certificate = collection[0]; 

      var privateKey = certificate.PrivateKey as RSACryptoServiceProvider; 
      var bytesData = Convert.FromBase64String(data); 
      var dataByte = privateKey.Decrypt(bytesData, false); 
      return Convert.ToBase64String(dataByte); 
     } 
     catch (Exception ex) 
     { 
      return ""; 
     } 
    } 
Смежные вопросы