вот что я хочу сделать
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();
}
в настоящее время работает нормально при шифровании открытым ключом и дешифровании закрытым ключом
сейчасУ меня есть две проблемы при расшифровке с помощью закрытого ключа
Когда я передаю свой закрытый ключ для шифрования моего сообщения, он расшифровывается, но когда я передаю свой открытый ключ, чтобы расшифровать те данные, которые я получилисключение из-за неправильного ключа и не работает
в 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>