⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rsaencryptanddecrypt.cs

📁 文件加密解密算法
💻 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 + -