我在C#下面的代碼:C# - 加密和解密數據使用RSA
主類
X509Certificate2 cert = new X509Certificate2("C:/test.pfx", "hello", X509KeyStorageFlags.Exportable | X509KeyStorageFlags.PersistKeySet);
Encryption enc = new Encryption();
string encrypted = enc.Encrypt("hello there", cert);
string decrypted = enc.Decrypt(encrypted, cert);
Console.WriteLine("Encrypted Text: " + encrypted);
Console.WriteLine("Decrypted Text: " + decrypted);
加密類
public string Encrypt(string plainText, X509Certificate2 cert)
{
RSACryptoServiceProvider publicKey = (RSACryptoServiceProvider)cert.PublicKey.Key;
byte[] plainBytes = Encoding.UTF8.GetBytes(plainText);
byte[] encryptedBytes = publicKey.Encrypt(plainBytes, false);
string encryptedText = encryptedBytes.ToString();
return encryptedText;
}
public string Decrypt(string encryptedText, X509Certificate2 cert)
{
RSACryptoServiceProvider privateKey = (RSACryptoServiceProvider)cert.PrivateKey;
byte[] encryptedBytes = Encoding.UTF8.GetBytes(encryptedText);
byte[] decryptedBytes = privateKey.Decrypt(encryptedBytes, false);
string decryptedText = decryptedBytes.ToString();
return decryptedText;
}
正如你所看到的,在主要課程中,我正在導入證書。然後我創建一個Encryption類的實例。然後,我將純文本與證書一起傳遞給Encrypt方法以獲取加密文本。之後,我將加密文本傳遞給Decrypt方法以獲取明文。
我的問題是打印加密文本的結果是系統。[]字節(如果我註釋瞭解密調用)。如果我不註釋解密調用,則會在解密方法中得到加密例外:錯誤數據。
我想encryptedBytes數組沒有正確轉換爲字符串。此外,我不確定我是否正確組建了RSAEncryptionProvider。我該如何解決這個問題?
更新
我解決了一個問題。當從字節數組轉換爲字符串時,我不得不使用Encoding.UTF8.GetString(EncryptedBytes)。現在的問題是解密方法給了我另一個加密異常(他要解密的數據超過了這個128字節模數的最大值)。
有人知道爲什麼會發生這種情況,以及如何解決它?
加密總是二進制數據進行(儘管它可能看起來像你的字符串),並總是產生二進制數據輸出。你爲什麼期待任何字符串? – 2013-04-28 10:26:27
請不要在標題中重複標籤。 – 2013-04-28 10:30:32
@Eugene我想在屏幕上顯示文本,看看它是否真的有效 – Matthew 2013-04-28 10:32:56