📄 rsaencryptanddecrypt.cs
字号:
using System;
using System.Collections.Generic;
using System.Text;
using System.Security.Cryptography;
using System.IO;
using System.Xml;
using System.Windows.Forms;
namespace FileEncrypt
{
class RsaEncryptAndDecrypt
{
private RSACryptoServiceProvider rsa;
public RsaEncryptAndDecrypt()
{
rsa = new RSACryptoServiceProvider();
}
public string GetPublicKey()
{
return rsa.ToXmlString(false);
}
public string GetPrivateKey()
{
return rsa.ToXmlString(true);
}
private byte[] ReadChild(XmlElement parent, string name)
{
XmlElement element1 = (XmlElement)parent.SelectSingleNode(name);
return Convert.FromBase64String(element1.InnerText);
}
public void EncrptyFile(string sourceFilePath, string destFilePath, string publicKeyFilePath)
{
RSAParameters parameters01;
parameters01 = new RSAParameters();
StreamReader reader01 = new StreamReader(publicKeyFilePath);
XmlDocument document01 = new XmlDocument();
document01.LoadXml(reader01.ReadToEnd());
XmlElement element01 = (XmlElement)document01.SelectSingleNode("RSAKeyValue");
parameters01.Modulus = ReadChild(element01, "Modulus");
parameters01.Exponent = ReadChild(element01, "Exponent");
CspParameters parameters02 = new CspParameters();
parameters02.Flags = CspProviderFlags.UseMachineKeyStore;
RSACryptoServiceProvider provider01 = new RSACryptoServiceProvider(parameters02);
provider01.ImportParameters(parameters01);
FileStream fin = new FileStream(sourceFilePath, FileMode.Open, FileAccess.Read);
FileStream fout = new FileStream(destFilePath, FileMode.Create, FileAccess.Write);
fout.SetLength(0);
long finLen = fin.Length;
long curLen = 0;
byte[] curSourceBytes = new byte[96];
while (curLen < finLen)
{
long len = fin.Read(curSourceBytes, 0, 96);
curLen += len;
byte[] curDestBytes = provider01.Encrypt(curSourceBytes, false);
fout.Write(curDestBytes, 0, curDestBytes.Length);
}
fin.Close();
fout.Close();
}
public void DecryptFile(string sourceFilePath, string destFilePath, string privateKeyFilePath)
{
RSAParameters parameters01;
parameters01 = new RSAParameters();
StreamReader reader01 = new StreamReader(privateKeyFilePath);
XmlDocument document01 = new XmlDocument();
document01.LoadXml(reader01.ReadToEnd());
XmlElement element01 = (XmlElement)document01.SelectSingleNode("RSAKeyValue");
parameters01.Modulus = ReadChild(element01, "Modulus");
parameters01.Exponent = ReadChild(element01, "Exponent");
parameters01.P = ReadChild(element01, "P");
parameters01.Q = ReadChild(element01, "Q");
parameters01.DP = ReadChild(element01, "DP");
parameters01.DQ = ReadChild(element01, "DQ");
parameters01.InverseQ = ReadChild(element01, "InverseQ");
parameters01.D = ReadChild(element01, "D");
CspParameters parameters02 = new CspParameters();
parameters02.Flags = CspProviderFlags.UseMachineKeyStore;
RSACryptoServiceProvider provider01 = new RSACryptoServiceProvider(parameters02);
provider01.ImportParameters(parameters01);
FileStream fin = new FileStream(sourceFilePath, FileMode.Open, FileAccess.Read);
FileStream fout = new FileStream(destFilePath, FileMode.Create, FileAccess.Write);
fout.SetLength(0);
long finLen = fin.Length;
long curLen = 0;
byte[] curSourceBytes = new byte[128];
while (curLen < finLen)
{
long len = fin.Read(curSourceBytes, 0, 128);
curLen += len;
byte[] curDestBytes = provider01.Decrypt(curSourceBytes, false);
fout.Write(curDestBytes, 0, curDestBytes.Length);
}
fin.Close();
fout.Close();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -