Преобразование байта [] в строку в байт [] - шифрование RSA C # - PullRequest
1 голос
/ 21 ноября 2011

Если я даю расшифровщик RSAalg2.Decrypt(encryptedData, false);, он работает нормально, но мне нужно преобразовать зашифрованные данные (байтовый массив) в строку, а затем обратно в байтовый массив.

Я попытался ASCIIEncoding, UTF-8, а не Unicode без удачи. Буду признателен за любую помощь, которую я могу получить. Спасибо

UnicodeEncoding ByteConverter = new UnicodeEncoding();

string dataString = "Test";

byte[] dataToEncrypt = ByteConverter.GetBytes(dataString);
byte[] encryptedData;
byte[] decryptedData;

RSACryptoServiceProvider RSAalg = new RSACryptoServiceProvider();

Console.WriteLine("Original Data: {0}", dataString);

encryptedData = RSAalg.Encrypt(dataToEncrypt, false);

Console.WriteLine("Encrypted Data: {0}", ByteConverter.GetString(encryptedData));

String XML = RSAalg.ToXmlString(true);
XmlDocument doc = new XmlDocument();
doc.LoadXml(XML);
doc.Save(Environment.CurrentDirectory + "\\key.xml");

RSACryptoServiceProvider RSAalg2 = new RSACryptoServiceProvider();

StreamReader sr2 = File.OpenText(Environment.CurrentDirectory + "\\key.xml");
string rsaXml2 = sr2.ReadToEnd();
sr2.Close();

RSAalg2.FromXmlString(rsaXml2);
string s = ByteConverter.GetString(encryptedData);
byte[] se = ByteConverter.GetBytes(s);
decryptedData = RSAalg2.Decrypt(se, false);

Console.WriteLine("Decrypted plaintext: {0}", ByteConverter.GetString(decryptedData));

1 Ответ

5 голосов
/ 21 ноября 2011

Приведенный ниже код демонстрирует, что вы ищете.

    [Test]
    public void RsaEncryptDecryptDemo()
    {
        const string str = "Test";
        var rsa = new RSACryptoServiceProvider();
        var encodedData = rsa.Encrypt(Encoding.UTF8.GetBytes(str), false);

        var encodedString = Convert.ToBase64String(encodedData);
        var decodedData = rsa.Decrypt(Convert.FromBase64String(encodedString), false);
        var decodedStr = Encoding.UTF8.GetString(decodedData);

        Assert.AreEqual(str, decodedStr);
    }

Хитрость заключается в преобразовании вашего байтового массива в форму, которая может быть представлена ​​в виде строки.Для этого в приведенном выше примере используется кодирование и декодирование Base64.

...