AES实现大文件分块加秘和解秘

搞了三天尝试了n多方法之后终于搞定,代码如下:

 

using System;
using System.Text;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.IO;
using System.Security.Cryptography;

namespace VideoEncrypt
{
    class Program
    {
        static void Main(string[] args)
        {
            RijndaelManaged rij = new RijndaelManaged();
            rij.KeySize = 128;

            string fp = @"E://friends//3//3.mkv";
            string sPhysicalFilePath = @"E://friends//3//o3.mkv";
            string fw = @"E://friends//3//dd3.mkv";
            Console.WriteLine("Encrypting begin...");
            encryption(rij, fp, sPhysicalFilePath);
            decryption(rij,sPhysicalFilePath,fw);

        }
        //用于加密的函数
        public static void encryption(RijndaelManaged rij,string readfile, string writefile)
        {
            try
            {
                    byte[] key = rij.Key;
                    byte[] iv = rij.IV;
                    byte[] buffer = new byte[4096];
                    Rijndael crypt = Rijndael.Create();
                    ICryptoTransform transform = crypt.CreateEncryptor(key, iv);
                    //写进文件
                    FileStream fswrite = new FileStream(writefile, FileMode.Create);
                    CryptoStream cs = new CryptoStream(fswrite, transform, CryptoStreamMode.Write);
                    //打开文件
                    FileStream fsread = new FileStream(readfile, FileMode.Open);
                    int length;
                    //while ((length = fsread.ReadByte()) != -1)
                        //cs.WriteByte((byte)length);
                    while ((length = fsread.Read(buffer, 0, 4096)) > 0)
                        cs.Write(buffer, 0, (int)length);

                    fsread.Close();
                    cs.Close();
                    fswrite.Close();
                    Console.WriteLine("Encrypt Success");
            }
            catch (Exception e)
            {
                Console.WriteLine("Encrypt Faile"+e.ToString());
            }
        }
        //用于解密的函数
        public static void decryption(RijndaelManaged rij, string readfile, string writefile)
        {
            try
            {
                byte[] key = rij.Key;
                byte[] iv = rij.IV;
                byte[] buffer=new byte[4096];
                    Rijndael crypt = Rijndael.Create();
                    ICryptoTransform transform = crypt.CreateDecryptor(key, iv);
                    //读取加密后的文件
                    FileStream fsopen = new FileStream(readfile, FileMode.Open);
                    CryptoStream cs = new CryptoStream(fsopen, transform, CryptoStreamMode.Read);
                    //把解密后的结果写进文件
                    FileStream fswrite = new FileStream(writefile, FileMode.OpenOrCreate);
                   
                    int length;
                    //while ((length = cs.ReadByte()) != -1)
                        //fswrite.WriteByte((byte)length);
                    while ((length = cs.Read(buffer, 0, 4096)) > 0)
                        fswrite.Write(buffer, 0, (int)length);
                    fswrite.Close();
                    cs.Close();
                    fsopen.Close();
                    Console.WriteLine("Decrypt Success");
            }
            catch (Exception e)
            {
                Console.WriteLine("Decrypt Failed"+e.ToString());
            }
        }


      
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值