C# RSACryptoServiceProvider ToXmlString()/FromXmlString()

EDIT2:
Semble Convertir.FromBase64String est mon sauveur. Personne ne sait si une virgule aurait tous être dans une telle chaîne? Je suis en train de faire csv de l'analyse. Si c'est que je peux toujours utiliser les guillemets (mais peut-cite jamais être dans une chaîne comme celle-ci aussi, je suppose), mais c'est juste un petit projet pour moi donc, juste plus facile à analyser par fractionnement par des ','.

EDIT:
OK, donc il semblerait que mon problème est quand je convertir chiffrées octets d'une chaîne de caractères, puis de convertir cette chaîne d'octets à être déchiffré. Comment pourrais-je faire cela parce que je veux stocker la chaîne cryptée quelque part et d'être capable de déchiffrer cette chaîne.

Je suis en train d'enregistrer la clé publique (et privée juste pour le test) dans un fichier xml pour que je puisse lire la même dans le plus tard, mais l'obtention de "Mauvais" données de l'erreur en essayant de le décrypter. N'importe qui peut voir ce que je fais mal?

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);
}
}

}

OriginalL'auteur user441521 | 2011-07-18