rsa_.cs

来自「用des算法与ras算法实现的文件加密选择器的实现与控制。」· CS 代码 · 共 166 行

CS
166
字号
using System;
using System.Collections.Generic;
using System.Text;
using System.Security.Cryptography;
using System.IO;

namespace EncryptSelector
{
    class RSA_
    {
        private RSACryptoServiceProvider rsa;
        public RSA_()
        {
            rsa = new RSACryptoServiceProvider();
        }
        /// <summary>
        /// 得到公钥
        /// </summary>
        /// <returns></returns>
        public string GetPublicKey()
        {
            return rsa.ToXmlString(false);
        }
        /// <summary>
        /// 得到私钥
        /// </summary>
        /// <returns></returns>
        public string GetPrivateKey()
        {
            return rsa.ToXmlString(true);

        }
        /// <summary>
        /// 加密
        /// </summary>
        /// <param name="Source">待加密字符串</param>
        /// <param name="PublicKey">公钥</param>
        /// <returns></returns>
        public string Encrypt(string Source, string PublicKey)
        {
            rsa.FromXmlString(PublicKey);
            byte[] done = rsa.Encrypt(Convert.FromBase64String(Source), false);
            return Convert.ToBase64String(done);
        }
        /// <summary>
        /// 加密
        /// </summary>
        /// <param name="Source">待加密字符数组</param>
        /// <param name="PublicKey">公钥</param>
        /// <returns></returns>
        public byte[] Encrypt(byte[] Source, string PublicKey)
        {
            rsa.FromXmlString(PublicKey);
            return rsa.Encrypt(Source, false);
        }
        /// <summary>
        /// 加密
        /// </summary>
        /// <param name="inFileName">待加密文件路径</param>
        /// <param name="outFileName">加密后文件路径</param>
        /// <param name="PublicKey">公钥</param>
        public void Encrypt(string inFileName, string outFileName, string PublicKey)
        {
            try
            {
                //rsa.FromXmlString(PublicKey);
                FileStream fin = new FileStream(inFileName, FileMode.Open, FileAccess.Read);
                FileStream fout = new FileStream(outFileName, FileMode.OpenOrCreate, FileAccess.Write);
                fout.SetLength(0);

                byte[] bin = new byte[1000];
                long rdlen = 0;
                long totlen = fin.Length;
                int len;

                while (rdlen < totlen)
                {
                    len = fin.Read(bin, 0, 1000);
                    byte[] b = new byte[len];
                    for (int i = 0; i < len; i++)
                    {
                        b[i] = bin[i];
                    }
                    byte[] bout = rsa.Encrypt(b, false);

                    fout.Write(bout, 0, len);
                    rdlen = rdlen + len;
                }

                fout.Close();
                fin.Close();
            }
            catch (Exception ex)
            {
                throw new Exception("在文件加密的时候出现错误!错误提示: \n" + ex.Message);
            }

        }
        /// <summary>
        /// 解密
        /// </summary>
        /// <param name="Source">待解密字符串</param>
        /// <param name="PrivateKey">私钥</param>
        /// <returns></returns>
        public string Decrypt(string Source, string PrivateKey)
        {
            rsa.FromXmlString(PrivateKey);
            byte[] done = rsa.Decrypt(Convert.FromBase64String(Source), false);
            return Convert.ToBase64String(done);
        }
        /// <summary>
        /// 解密
        /// </summary>
        /// <param name="Source">待解密字符数组</param>
        /// <param name="PrivateKey">私钥</param>
        /// <returns></returns>
        public byte[] Decrypt(byte[] Source, string PrivateKey)
        {
            rsa.FromXmlString(PrivateKey);
            return rsa.Decrypt(Source, false);
        }
        /// <summary>
        /// 解密,这个函数解密有错,需要替换代码
        /// </summary>
        /// <param name="inFileName">待解密文件路径</param>
        /// <param name="outFileName">解密后文件路径</param>
        /// <param name="PrivateKey">私钥</param>
        public void Decrypt(string inFileName, string outFileName, string PrivateKey)
        {
            try
            {
                rsa.FromXmlString(PrivateKey);
                FileStream fin = new FileStream(inFileName, FileMode.Open, FileAccess.Read);
                FileStream fout = new FileStream(outFileName, FileMode.OpenOrCreate, FileAccess.Write);
                fout.SetLength(0);

                byte[] bin = new byte[1000];
                long rdlen = 0;
                long totlen = fin.Length;
                int len;

                while (rdlen < totlen)
                {
                    len = fin.Read(bin, 0, 1000);
                    byte[] b = new byte[len];
                    for (int i = 0; i < len; i++)
                    {
                        b[i] = bin[i];
                    }
                    byte[] bout = rsa.Decrypt(b, false);
                    fout.Write(bout, 0, len);
                    rdlen = rdlen + len;
                }

                fout.Close();
                fin.Close();
            }
            catch (Exception ex)
            {
                throw new Exception("在文件解密的时候出现错误!错误提示: \n" + ex.Message);
            }

        }
    }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?