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的调研工作.断断续续花了一周的时 ...
随机推荐
- FFmpeg常用命令学习笔记(三)分解/复用命令
分解/复用命令 比如文件格式的转换.将封装格式文件中的音频与视频文件分别抽取出来等. 多媒体格式的转换(将MP4文件转成flv格式) ffmpeg -i yan.mp4 -vcodec copy -a ...
- Peter Shirley Ray Tracing in One Weekend(上篇)
Peter Shirley-Ray Tracing in One Weekend (2016) 原著:Peter Shirley 本书是Peter Shirley ray tracing系列三部曲的第 ...
- springboot2.0入门(五)--swagger2接口API构建
一.特点 代码变,文档变.只需要少量的注解,Swagger 就可以根据代码自动生成 API 文档,很好的保证了文档的时效性. 跨语言性,支持 40 多种语言. Swagger UI 呈现出来的是一份可 ...
- vue中使用v-chart改变柱状图颜色以及X轴Y轴的文字颜色和大小以及标题
1.html部分 <ve-histogram :tooltip-visible="true" :x-axis="xAxis" :y-axis=" ...
- [python之ipython] jupyter notebook在云端服务器上开启,本地访问
本地ssh到云端: ssh username@xxx.xxx.xxx.xxx -L127.0.0.1:7777:127.0.0.1:8888 把云端的8888端口映射到本地的7777端口 云端运行指令 ...
- Python数据分析:Numpy学习笔记
Numpy学习笔记 ndarray多维数组 创建 import numpy as np np.array([1,2,3,4]) np.array([1,2,3,4,],[5,6,7,8]) np.ze ...
- Linux+CLion+树莓派远程编译时,Cmake编译出现undefined reference to 'dlopen'的解决办法
在Clion中链接讯飞的语音库并传至树莓派上编译时,出现如下错误. undefined reference to `dlopen' undefined reference to `dlclose' u ...
- jQuery的$符号
jQuery使用$的原因是: 书写简洁, 相对于其他字符与众不同, 容易被记住. JQuery占用了两个变量: $ 和 jQuery. 当在代码中打印 $ 和 jQuery时: <script ...
- 西湖论剑2019--一道MISC题目的解题思路
TTL题的writeup 第一次打西湖论剑,啥都不懂,被题目虐的很惨,一共就做出来两道题,但也算有收获.这里分享一下TTL那道misc题目的writeup,算是给自己点安慰吧. 题目描述 我们截获了一 ...
- (转载)完成端口(CompletionPort)详解 - 手把手教你玩转网络编程系列之三
转自:http://blog.csdn.net/piggyxp/article/details/6922277 前 言 本系列里完成端口的代码在两年前就已经写好了,但是由于许久没有写东西了,不知该如何 ...