public static async Task ZipAsync(string[] srcFiles,string writeFile,int size=  *  * , 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)) > )
await entryStream.WriteAsync(len != size ? buffer.Slice(, len) : buffer,ct);
}
}
catch (Exception e)
{
Console.WriteLine("Entry Failed" + e);
}
}
} public static void Encrypt(SymmetricAlgorithm provider, string readFile, string writeFile,int size=)
{
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)) > )
cs.Write(len != size ? buffer.Slice(, 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 = )
{
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)) > )
fsWrite.Write(len != size ? buffer.Slice(, 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 = , 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)) > )
await cs.WriteAsync(len != size ? buffer.Slice(, 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 = , 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)) > )
await fsWrite.WriteAsync(len != size ? buffer.Slice(, 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);
}
}

C#大文件流式压缩加解密的更多相关文章

  1. 精讲RestTemplate第6篇-文件上传下载与大文件流式下载

    本文是精讲RestTemplate第6篇,前篇的blog访问地址如下: 精讲RestTemplate第1篇-在Spring或非Spring环境下如何使用 精讲RestTemplate第2篇-多种底层H ...

  2. C# 利用ICSharpCode.SharpZipLib实现在线加密压缩和解密解压缩 C# 文件压缩加解密

    C# 利用ICSharpCode.SharpZipLib实现在线加密压缩和解密解压缩   这里我们选用ICSharpCode.SharpZipLib这个类库来实现我们的需求. 下载地址:http:// ...

  3. C# 文件压缩加解密

    1.这种方式也可以做到对文件的加密压缩,解密解压缩,只是在压缩和解压缩时会出现压缩窗口 1.1加密压缩 strzipPath:压缩包路径 strtxtPath:待压缩的文件路径 password:加密 ...

  4. java获取远程网络图片文件流、压缩保存到本地

    1.获取远程网路的图片 /** * 根据地址获得数据的字节流 * * @param strUrl * 网络连接地址 * @return */ public static byte[] getImage ...

  5. Java实现http大文件流读取并批量插入数据库

    1.概述 请求远程大文本,使用流的方式进行返回.需要设置http链接的超时时间 循环插入到List中,使用mybatis-plus批量插入到mysql中 2.需求 两台服务器 大文件放到其中一台服务器 ...

  6. Fiddler忽略捕捉大文件流

    Fiddler是款非常不错的抓包软件,可以方便的捕捉各种软件发起的HTTP请求,甚至可以在发送给服务器前或响应给应用前修改数据.但是在使用时发现,在开启Fiddler时,在浏览器中下载文件时不会马上弹 ...

  7. golang gin框架中实现大文件的流式上传

    一般来说,通过c.Request.FormFile()获取文件的时候,所有内容都全部读到了内存.如果是个巨大的文件,则可能内存会爆掉:且,有的时候我们需要一边上传一边处理. 以下的代码实现了大文件流式 ...

  8. Zip文件压缩(加密||非加密||压缩指定目录||压缩目录下的单个文件||根据路径压缩||根据流压缩)

    1.写入Excel,并加密压缩.不保存文件 String dcxh = String.format("%03d", keyValue); String folderFileName ...

  9. 流式处理框架storm浅析(上篇)

    本文来自网易云社区 作者:汪建伟 前言 前一段时间参与哨兵流式监控功能设计,调研了两个可以做流式计算的框架:storm和spark streaming,我负责storm的调研工作.断断续续花了一周的时 ...

随机推荐

  1. ACM-ICPC 2015 沈阳赛区现场赛 F. Frogs && HDU 5514(容斥)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5514 题意:有m个石子围成一圈, 有n只青蛙从跳石子, 都从0号石子开始, 每只能越过xi个石子.问所 ...

  2. [Web Component] Allow External Styling of a Web Component's Shadow DOM

    The Shadow DOM protects your components from style conflicts. The same protection also makes it hard ...

  3. addBack() 添加堆栈中元素集合到当前集合,一个选择性的过滤选择器。

    addBack() 概述 添加堆栈中元素集合到当前集合,一个选择性的过滤选择器. 如上所述在讨论中的.end(), jQuery对象维护一个堆栈内部来跟踪匹配的元素集合的变化.当一个DOM遍历方法被调 ...

  4. Easy-RSA 3 Quickstart README

    Easy-RSA 3 Quickstart README This is a quickstart guide to using Easy-RSA version 3. Detailed help o ...

  5. JS 定时器-setInterval、clearInterval、setTimeout

    在微信小程序里写的: // pages/splash/splash.js const app = getApp() Page({ data: { remainSecond: }, // 页面渲染完成后 ...

  6. Appium环境搭建(win/mac)

    课程使用Windows+Android虚拟机, 建议使用Windows系统学习课程, 如使用Mac系统, 请另外准备一台Andorid手机 Windows系统Appium环境搭建 安装JDK并配置环境 ...

  7. Win10 + CLion + 树莓派 + QT 远程开发调用Python

    原则:能在一个机器上开发的就不在两台机器上!! 首先需要配置远程QT开发环境 配置Cmake cmake_minimum_required(VERSION 3.14) project(qt_test) ...

  8. 如何检测域名是否被微信屏蔽 微信域名检测接口API是如何实现

    微信域名检测技术的主要用户是微信域名防封,大家知道拼多多这种网站,靠诱导分享方式在微信里面摇身一变已经估值160亿美元,身价仅次于京东了 ,这是何等的速度,简直是惊为天人,but 如果你想玩微信病毒营 ...

  9. 如何优雅地防止MLE(for linux)

    赛前最后一天模拟赛又有小伙伴MLE了--这里就讲一下如何较为精确地获取程序运行时间和空间. 资源统计当然是操作系统统计的最精确.所以可以这样写(noilinux实测通过,windows下应该不行): ...

  10. JAVA基础知识|HTTP协议-发展历程

    HTTP 是基于 TCP/IP 协议的应用层协议.它不涉及数据包(packet)传输,主要规定了客户端和服务器之间的通信格式,默认使用80端口. 此文章为转载内容:http://www.ruanyif ...