Как зашифровать закрытым ключом в c # (RSA) - PullRequest
1 голос
/ 26 марта 2019

вот что я хочу сделать

1.создать пару открытых и закрытых ключей для шифрования

2.шифровать данные с помощью закрытого ключа

3.расшифровать данные с помощью открытого ключа

Я хочу зашифровать данные с помощью закрытого ключа, чтобы зашифрованные данные, которые я отправляю кому-либо
, могли быть расшифрованы моим открытым ключом
, обеспечивающим получение данных от меня

вот что у меня сейчас
я использую RSACryptoServiceProvider класс

var rsa = new RSACryptoServiceProvider();  
var   privateKey = rsa.ToXmlString(true);  
var  publicKey = rsa.ToXmlString(false);
  var text = "my messege";
  Console.WriteLine("RSA // Text to encrypt: " + text);
  var enc = Encrypt(text, publicKey);
  Console.WriteLine("RSA // Encrypted Text: " + enc);
  var dec = Decrypt(enc, privateKey);
  Console.WriteLine("RSA // Decrypted Text: " + dec);

мои методы
для расшифровки

 public static string Decrypt(string data,string pvtK)
                  {
                      var rsa = new RSACryptoServiceProvider();
                      var dataArray = data.Split(new char[] { ',' });
                      byte[] dataByte = new byte[dataArray.Length];
                      for (int i = 0; i < dataArray.Length; i++)
                      {
                          dataByte[i] = Convert.ToByte(dataArray[i]);
                      }

                      rsa.FromXmlString(pvtK);
                      var decryptedByte = rsa.Decrypt(dataByte, false);

                      return _encoder.GetString(decryptedByte);
                  }

для шифрования

  public static string Encrypt(string data,string pubK)
                  {
                      var rsa = new RSACryptoServiceProvider();
                      rsa.FromXmlString(pubK);
                      var dataToEncrypt = _encoder.GetBytes(data);
                      var encryptedByteArray = rsa.Encrypt(dataToEncrypt, false).ToArray();
                      var length = encryptedByteArray.Count();
                      var item = 0;
                      var sb = new StringBuilder();
                      foreach (var x in encryptedByteArray)
                      {
                          item++;
                          sb.Append(x);

                          if (item < length)
                              sb.Append(",");
                      }

                      return sb.ToString(); 
                  }  

в настоящее время работает нормально при шифровании открытым ключом и дешифровании закрытым ключом

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

  1. Когда я передаю свой закрытый ключ для шифрования моего сообщения, он расшифровывается, но когда я передаю свой открытый ключ, чтобы расшифровать те данные, которые я получилисключение из-за неправильного ключа и не работает

  2. в RSACryptoServiceProvider закрытый ключ - это сочетание открытого и закрытого ключей. Как узнать, какой у меня действительный закрытый ключ, как в xmlFormat, что делает его действительно труднымопределить, что означает каждая вещь в ключе

вот мой личный ключ

<RSAKeyValue><Modulus>sHQOnB9obOy9UUvKolGBYUHyGNKXKC7ZqerB/pLQcOKKlhqXAB5KLPf62banbC5DLU5+Mhd25sq5KE5l/vEZeQLia+np2TYwis8bNVQpLYh/Q2MmuldKzl4Al+ziVH90NLe0fX6LiC5W9Q36HkzV16BKrHwLPljNNBNYWENl/p8=</Modulus><Exponent>AQAB</Exponent><P>vGAPI9BTSnOvVKQ9spTt7WaCb3j+Dexy48VHbGV2+h1hKEA7pF4Mrog7VL7MCNp8G8XZIWh3sMa9VHn2bNv0mQ==</P><Q>78xcUFFtngtKxpr6pZssiXIlTThFo7X2zRiUsWLSUKDJlYlGELu8cGAxzbRYirk2psm92Fga1jAPNDhuzpVX9w==</Q><DP>dHcThTn89RAXO8ab2riXbequBEuTD3q8AbTsFsmYyMS3WBJ2jYYUYygZPqkELwkeKHGncC9NqP8G+Z66S82mKQ==</DP><DQ>C7Zel+myQfLpPxQYw/f1T+1MVx41gI6FtHTL5nIeNaP01KH00yJoTNDV/eceIAB14+WcqTF8dhO42mMbPmna9w==</DQ><InverseQ>ORoUweiOyF+eEQ3F3+NU2IdcSYM5TRG/J73er1nBuyfz5QjKpOhSWqtl5W3mNmQmX8/WDv9bFzgE0jPdXQtFTQ==</InverseQ><D>B/agGpHcs7gpdFJNCYjpI5UHOPFdt6DWdPGVCLxI4oqIaG04Lfd8yU1cIyUE2eaEMWn1J9iUQEBoHWmp9vJozLbhzUdQUC+tcrms4dys6U+AhLTJ+obpmlJczdVABSWlwFe1lnoJNqJN9QQyc4tVvcLKzy+YPbhHvb66bfhVcqk=</D></RSAKeyValue>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...