C#大文件流式压缩加解密
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#大文件流式压缩加解密的更多相关文章
- 精讲RestTemplate第6篇-文件上传下载与大文件流式下载
本文是精讲RestTemplate第6篇,前篇的blog访问地址如下: 精讲RestTemplate第1篇-在Spring或非Spring环境下如何使用 精讲RestTemplate第2篇-多种底层H ...
- C# 利用ICSharpCode.SharpZipLib实现在线加密压缩和解密解压缩 C# 文件压缩加解密
C# 利用ICSharpCode.SharpZipLib实现在线加密压缩和解密解压缩 这里我们选用ICSharpCode.SharpZipLib这个类库来实现我们的需求. 下载地址:http:// ...
- C# 文件压缩加解密
1.这种方式也可以做到对文件的加密压缩,解密解压缩,只是在压缩和解压缩时会出现压缩窗口 1.1加密压缩 strzipPath:压缩包路径 strtxtPath:待压缩的文件路径 password:加密 ...
- java获取远程网络图片文件流、压缩保存到本地
1.获取远程网路的图片 /** * 根据地址获得数据的字节流 * * @param strUrl * 网络连接地址 * @return */ public static byte[] getImage ...
- Java实现http大文件流读取并批量插入数据库
1.概述 请求远程大文本,使用流的方式进行返回.需要设置http链接的超时时间 循环插入到List中,使用mybatis-plus批量插入到mysql中 2.需求 两台服务器 大文件放到其中一台服务器 ...
- Fiddler忽略捕捉大文件流
Fiddler是款非常不错的抓包软件,可以方便的捕捉各种软件发起的HTTP请求,甚至可以在发送给服务器前或响应给应用前修改数据.但是在使用时发现,在开启Fiddler时,在浏览器中下载文件时不会马上弹 ...
- golang gin框架中实现大文件的流式上传
一般来说,通过c.Request.FormFile()获取文件的时候,所有内容都全部读到了内存.如果是个巨大的文件,则可能内存会爆掉:且,有的时候我们需要一边上传一边处理. 以下的代码实现了大文件流式 ...
- Zip文件压缩(加密||非加密||压缩指定目录||压缩目录下的单个文件||根据路径压缩||根据流压缩)
1.写入Excel,并加密压缩.不保存文件 String dcxh = String.format("%03d", keyValue); String folderFileName ...
- 流式处理框架storm浅析(上篇)
本文来自网易云社区 作者:汪建伟 前言 前一段时间参与哨兵流式监控功能设计,调研了两个可以做流式计算的框架:storm和spark streaming,我负责storm的调研工作.断断续续花了一周的时 ...
随机推荐
- C# 之 .net core -- 创建项目
一.新建一个Web 的 应用程序 二.选择项目的基本信息(.net coer 2.2 和带有试图控制器的程序) 这个是类似以MVC的模式,也可以用其他的,总之需要什么选什么 三. 然后既可以看到这样一 ...
- hbase实践之HFile结构
本文目录如下所示: 目录 HFile在HBase架构中的位置 什么是HFile HFile逻辑结构 HFile逻辑结构的优点 HFile物理结构 HFile生成流程 HFile中Block块解析 多大 ...
- Java的值传递和引用传递的说法
学过Java基础的人都知道:值传递和引用传递是初次接触Java时的一个难点,有时候记得了语法却记不得怎么实际运用,有时候会的了运用却解释不出原理,而且坊间讨论的话题又是充满争议:有的论坛帖子说Java ...
- Qt 程序自动重启的实现
正常退出调用exit() 或quit()就行,想要自已重启可按下面代码: void XXX:onRestart() { //类中调用 qApp->exit(); } 主main函数中处理 int ...
- 题解 noip2019模拟赛Day1T3
题面 运河计划 问题描述 水运在人类的交通运输史中一直扮演着重要的角色.借助河流.的便利,人们得以把大量的货物输送到天南海北不仅仅是自然界现成的河流,人工开凿的运河(如苏伊士运河.巴拿马运河.我国的京 ...
- 微信小程序填坑之旅(1)-app.js中用云开发获取openid,在其他页上用app.globaldata.openid获取为空
参考:小程序如何在其他页面监听globalData中值的变化?https://www.jianshu.com/p/8d1c4626f9a3 原因就是:app.js没执行完时,其他页已经onload了, ...
- 数据结构实验之栈与队列一:进制转换(SDUT 2131)
题目链接 题解: 特判一下n==0的时候. #include <bits/stdc++.h> using namespace std; int a[1000]; int main() { ...
- OSI七层参考模型
一.OSI七层模型简述 二.每层的作用 三.数据封装的过程 四.数据解封的过程
- luogu3629
P3629 [APIO2010]巡逻 题目描述 在一个地区中有 n 个村庄,编号为 1, 2, ..., n.有 n – 1 条道路连接着这些村 庄,每条道路刚好连接两个村庄,从任何一个村庄,都可以通 ...
- Python之从继承到C3算法
在Python2.X和Python3.X有很多不同的地方,其中一个区别就是和继承有关. 在Python3.X中,一个类如果没有指明其继承哪个类的时候,其默认就是继承object类. 而在Python2 ...