Чесно кажучи, у мене виникають труднощі з його реалізацією, оскільки я майже не маю підручників, які я шукав, на яких відображається запис ключів у файли. Прийнята відповідь була "нормально". Але для мене мені довелося вдосконалити його, щоб обидва ключі збереглись у двох окремих файлах. Я написав допоміжний клас, тож ви просто повинні скопіювати та вставити його. Сподіваюся, це допомагає хаха.
using Microsoft.Win32;
using System;
using System.IO;
using System.Security.Cryptography;
namespace RsaCryptoExample
{
class RSAFileHelper
{
readonly string pubKeyPath = "public.key";
readonly string priKeyPath = "private.key";
public void MakeKey()
{
RSACryptoServiceProvider csp = new RSACryptoServiceProvider(2048);
RSAParameters privKey = csp.ExportParameters(true);
RSAParameters pubKey = csp.ExportParameters(false);
string pubKeyString;
{
var sw = new StringWriter();
var xs = new System.Xml.Serialization.XmlSerializer(typeof(RSAParameters));
xs.Serialize(sw, pubKey);
pubKeyString = sw.ToString();
File.WriteAllText(pubKeyPath, pubKeyString);
}
string privKeyString;
{
var sw = new StringWriter();
var xs = new System.Xml.Serialization.XmlSerializer(typeof(RSAParameters));
xs.Serialize(sw, privKey);
privKeyString = sw.ToString();
File.WriteAllText(priKeyPath, privKeyString);
}
}
public void EncryptFile(string filePath)
{
string pubKeyString;
{
using (StreamReader reader = new StreamReader(pubKeyPath)){pubKeyString = reader.ReadToEnd();}
}
var sr = new StringReader(pubKeyString);
var xs = new System.Xml.Serialization.XmlSerializer(typeof(RSAParameters));
RSACryptoServiceProvider csp = new RSACryptoServiceProvider();
csp.ImportParameters((RSAParameters)xs.Deserialize(sr));
byte[] bytesPlainTextData = File.ReadAllBytes(filePath);
var bytesCipherText = csp.Encrypt(bytesPlainTextData, false);
string encryptedText = Convert.ToBase64String(bytesCipherText);
File.WriteAllText(filePath,encryptedText);
}
public void DecryptFile(string filePath)
{
RSACryptoServiceProvider csp = new RSACryptoServiceProvider();
string privKeyString;
{
privKeyString = File.ReadAllText(priKeyPath);
var sr = new StringReader(privKeyString);
var xs = new System.Xml.Serialization.XmlSerializer(typeof(RSAParameters));
RSAParameters privKey = (RSAParameters)xs.Deserialize(sr);
csp.ImportParameters(privKey);
}
string encryptedText;
using (StreamReader reader = new StreamReader(filePath)) { encryptedText = reader.ReadToEnd(); }
byte[] bytesCipherText = Convert.FromBase64String(encryptedText);
byte[] bytesPlainTextData = csp.Decrypt(bytesCipherText, false);
File.WriteAllBytes(filePath, bytesPlainTextData);
}
}
}