Ehrlich gesagt habe ich Schwierigkeiten, es zu implementieren, da ich kaum Tutorials durchsucht habe, in denen die Schlüssel in die Dateien geschrieben werden. Die akzeptierte Antwort war "gut". Aber für mich musste ich es verbessern, damit beide Schlüssel in zwei separaten Dateien gespeichert werden. Ich habe eine Hilfsklasse geschrieben, also musst du sie einfach kopieren und einfügen. Hoffe das hilft 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);
}
}
}