Thành thật mà nói, tôi gặp khó khăn trong việc triển khai nó vì hầu như không có bất kỳ hướng dẫn nào mà tôi đã tìm kiếm hiển thị việc ghi các phím vào tệp. Câu trả lời được chấp nhận là "ổn". Nhưng đối với tôi, tôi đã phải cải thiện nó để cả hai khóa được lưu vào hai tệp riêng biệt. Tôi đã viết một lớp trợ giúp nên các bạn chỉ cần sao chép và dán nó. Hy vọng điều này sẽ giúp lol.
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);
}
}
}