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);
                }
            }
  • 相关阅读:
    objective-C 自定义对象归档的实现
    D3D游戏编程系列(一):DXLib的介绍
    再谈 retain,copy,mutableCopy(官方SDK,声明NSString都用copy非retain)
    uva 11292 Dragon of Loowater (勇者斗恶龙)
    【iOS开发】iOS7 兼容及部分细节
    QMenu的个性化定制
    基于Token的WEB后台认证机制
    Lua简易入门教程
    char,short ,int ,long,long long,unsigned long long数据范围
    用Kibana和logstash快速搭建实时日志查询、收集与分析系统
  • 原文地址:https://www.cnblogs.com/yzpopulation/p/11305516.html
Copyright © 2011-2022 走看看