zoukankan      html  css  js  c++  java
  • C#大文件流式压缩加解密

            public static async Task ZipAsync(string[] srcFiles,string writeFile,int size= 1024 * 1024 * 32, CancellationToken token=default)
            {
                try
                {
                    FileStream zipStream = new FileStream(writeFile, FileMode.OpenOrCreate);
                    using (ZipArchive archive = new ZipArchive(zipStream, ZipArchiveMode.Create))
                    {
                        foreach (string srcFile in srcFiles)
                            await Entry(archive, srcFile, token);
                    }
                    zipStream.Dispose();
                    Console.WriteLine("Zip Success");
                }
                catch (Exception e)
                {
                    Console.WriteLine("Zip Failed" + e);
                }
    
                async Task Entry(ZipArchive archive,string srcFile, CancellationToken ct)
                {
                    try
                    {
                        ZipArchiveEntry fileEntry = archive.CreateEntry(Path.GetFileName(srcFile));
                        FileStream srcStream = new FileStream(srcFile, FileMode.Open);
                        var buffer = new Memory<byte>(new byte[size]);
                        using (Stream entryStream = fileEntry.Open())
                        {
                            int len;
                            while ((len=await srcStream.ReadAsync(buffer, ct)) > 0)
                                await entryStream.WriteAsync(len != size ? buffer.Slice(0, len) : buffer,ct);
                        }
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine("Entry Failed" + e);
                    }
                }
            }
    
    
    
            public static void Encrypt(SymmetricAlgorithm provider, string readFile, string writeFile,int size=4096)
            {
                try
                {
                    var buffer=new Span<byte>(new byte[size]);
                    FileStream fsWrite = new FileStream(writeFile, FileMode.Create);
                    FileStream fsRead = new FileStream(readFile, FileMode.Open);
                    ICryptoTransform transform = provider.CreateEncryptor(provider.Key, provider.IV);
                    CryptoStream cs = new CryptoStream(fsWrite, transform, CryptoStreamMode.Write);
                    int len;
                    while ((len = fsRead.Read(buffer)) > 0)
                        cs.Write(len != size ? buffer.Slice(0, len) : buffer);
                    fsRead.Close();
                    cs.Close();
                    fsWrite.Close();
                    Console.WriteLine("Encrypt Success");
                }
                catch (Exception e)
                {
                    Console.WriteLine("Encrypt Failed" + e);
                }
            }
            public static void Decrypt(SymmetricAlgorithm provider, string readFile, string writeFile, int size = 4096)
            {
                try
                {
                    var buffer = new Span<byte>(new byte[size]);
                    FileStream fsRead = new FileStream(readFile, FileMode.Open);
                    FileStream fsWrite = new FileStream(writeFile, FileMode.OpenOrCreate);
                    ICryptoTransform transform = provider.CreateDecryptor(provider.Key, provider.IV);
                    CryptoStream cs = new CryptoStream(fsRead, transform, CryptoStreamMode.Read);
                    int len;
                    while ((len = cs.Read(buffer)) > 0)
                        fsWrite.Write(len != size ? buffer.Slice(0, len) : buffer);
                    fsWrite.Close();
                    cs.Close();
                    fsRead.Close();
                    Console.WriteLine("Decrypt Success");
                }
                catch (Exception e)
                {
                    Console.WriteLine("Decrypt Failed" + e);
                }
            }
            public static async Task EncryptAsync(SymmetricAlgorithm provider, string readFile, string writeFile, int size = 4096, CancellationToken token=default)
            {
                try
                {
                    var buffer = new Memory<byte>(new byte[size]);
                    FileStream fsWrite = new FileStream(writeFile, FileMode.Create);
                    FileStream fsRead = new FileStream(readFile, FileMode.Open);
                    ICryptoTransform transform = provider.CreateEncryptor(provider.Key, provider.IV);
                    CryptoStream cs = new CryptoStream(fsWrite, transform, CryptoStreamMode.Write);
                    int len;
                    while ((len = await fsRead.ReadAsync(buffer, token)) > 0)
                        await cs.WriteAsync(len != size ? buffer.Slice(0, len) : buffer,token);
                    await fsWrite.FlushAsync(token);
                    fsRead.Close();
                    cs.Close();
                    fsWrite.Close();
                    Console.WriteLine("Encrypt Success");
                }
                catch (Exception e)
                {
                    Console.WriteLine("Encrypt Failed" + e);
                }
            }
            public static async Task DecryptAsync(SymmetricAlgorithm provider, string readFile, string writeFile, int size = 4096, CancellationToken token = default)
            {
                try
                {
                    var buffer = new Memory<byte>(new byte[size]);
                    FileStream fsRead = new FileStream(readFile, FileMode.Open);
                    FileStream fsWrite = new FileStream(writeFile, FileMode.OpenOrCreate);
                    ICryptoTransform transform = provider.CreateDecryptor(provider.Key, provider.IV);
                    CryptoStream cs = new CryptoStream(fsRead, transform, CryptoStreamMode.Read);
                    int len;
                    while ((len = await cs.ReadAsync(buffer,token)) > 0)
                        await  fsWrite.WriteAsync(len != size ? buffer.Slice(0, len) : buffer,token);
                    await fsWrite.FlushAsync(token);
                    fsRead.Close();
                    cs.Close();
                    fsWrite.Close();
                    Console.WriteLine("Decrypt Success");
                }
                catch (Exception e)
                {
                    Console.WriteLine("Decrypt Failed" + e);
                }
            }
  • 相关阅读:
    Android上的水果忍者刀锋效果(JAVA实现)
    界址坐标转换器说明
    C# MVC4 执行特性之后不再执行Action
    广西公需科目自动学习
    mvc4 利用filters特性来 实现自己的权限验证 之二
    mvc4 利用filters特性来 实现自己的权限验证 之一
    利用hao123天气插件的地址选择提供的api进行跨域调用实现地址的省 地级市 县 联动选择。
    javascript 判断变量 是否为空null,undefined, 空数组,空对象(空Object),字符串是否为空或全由空白字符组成,数字是否为0,布尔是否为false。
    git使用
    ios微信公众号分享回调事件
  • 原文地址:https://www.cnblogs.com/yzpopulation/p/11305516.html
Copyright © 2011-2022 走看看