EDIT2: кажется Convert.FromBase64String мой спаситель.Кто-нибудь знает, будет ли в такой строке запятая?Я делаю основной анализ CSV.Если это так, я всегда могу использовать кавычки (но я могу предположить, что кавычки всегда могут быть в такой строке), но для меня это всего лишь небольшой проект, так что его проще разобрать, разделив на ','.
РЕДАКТИРОВАТЬ: ОК, так что, похоже, моя проблема заключается в том, когда я преобразую зашифрованные байты в строку, а затем преобразую эту строку обратно в байты для расшифровки.Как я могу это сделать, потому что я хочу где-то хранить зашифрованную строку и иметь возможность расшифровывать эту строку.
Я пытаюсь сохранить открытый ключ (и закрытый только для тестирования) в XML-файл, такчто я могу прочитать то же самое позже, но получаю ошибку «Bad data» при попытке расшифровать.Кто-нибудь может увидеть, что я делаю не так?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Cryptography;
using System.IO;
namespace EncryptionTest
{
class Program
{
static void Main(string[] args)
{
UnicodeEncoding ByteConverter = new UnicodeEncoding();
byte[] dataToEncrypt = ByteConverter.GetBytes("Test data");
WriteRSAInfoToFile();
string enc = Encrypt(dataToEncrypt);
enc = Decrypt(enc);
}
static void WriteRSAInfoToFile()
{
RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
TextWriter writer = new StreamWriter("C:\\publicKey.xml");
string publicKey = RSA.ToXmlString(false);
writer.Write(publicKey);
writer.Close();
writer = new StreamWriter("C:\\privateKey.xml");
string privateKey = RSA.ToXmlString(true);
writer.Write(privateKey);
writer.Close();
}
static string Encrypt(byte[] data)
{
UnicodeEncoding ByteConverter = new UnicodeEncoding();
RSACryptoServiceProvider encrypt = new RSACryptoServiceProvider();
TextReader reader = new StreamReader("C:\\publicKey.xml");
string publicKey = reader.ReadToEnd();
reader.Close();
encrypt.FromXmlString(publicKey);
byte[] encryptedData = encrypt.Encrypt(data, false);
return ByteConverter.GetString(encryptedData);
}
static string Decrypt(string data)
{
UnicodeEncoding ByteConverter = new UnicodeEncoding();
RSACryptoServiceProvider decrypt = new RSACryptoServiceProvider();
TextReader reader = new StreamReader("C:\\privateKey.xml");
string privateKey = reader.ReadToEnd();
reader.Close();
decrypt.FromXmlString(privateKey);
byte[] d = ByteConverter.GetBytes(data);
byte[] decryptedData = decrypt.Decrypt(d, false); // ERROR: bad data
return ByteConverter.GetString(decryptedData);
}
}
}