EDIT2: 似乎Convert.FromBase64String是我的救星。有誰知道逗號是否每個都在這樣一個字符串中?我正在做基本的csv解析。如果是這樣,我總是可以使用引號(但我也可以引用這樣的字符串)但這只是我自己的一個小項目,所以用','分割就更容易解析。C#RSACryptoServiceProvider ToXmlString()/ FromXmlString()
編輯: 好吧,看來我的問題是,當我將加密的字節轉換爲字符串,然後將該字符串轉換回字節解密。我怎麼能這樣做,因爲我想實際存儲加密字符串的地方,並能夠解密該字符串。
我試圖將公鑰(僅用於測試的私鑰)保存到xml文件,以便我可以在以後讀取相同的文件,但在嘗試解密時會出現「錯誤數據」錯誤。任何人都可以看到我做錯了什麼?
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);
}
}
}
你說得對! Base64工作。謝謝 – user441521
不要通過字符串編碼來翻譯密文 - http://blogs.msdn.com/b/shawnfa/archive/2005/11/10/491431.aspx 這裏值得一提。 – gmaran23