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的调研工作.断断续续花了一周的时 ...
随机推荐
- ACM-ICPC 2015 沈阳赛区现场赛 F. Frogs && HDU 5514(容斥)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5514 题意:有m个石子围成一圈, 有n只青蛙从跳石子, 都从0号石子开始, 每只能越过xi个石子.问所 ...
- [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 ...
- addBack() 添加堆栈中元素集合到当前集合,一个选择性的过滤选择器。
addBack() 概述 添加堆栈中元素集合到当前集合,一个选择性的过滤选择器. 如上所述在讨论中的.end(), jQuery对象维护一个堆栈内部来跟踪匹配的元素集合的变化.当一个DOM遍历方法被调 ...
- Easy-RSA 3 Quickstart README
Easy-RSA 3 Quickstart README This is a quickstart guide to using Easy-RSA version 3. Detailed help o ...
- JS 定时器-setInterval、clearInterval、setTimeout
在微信小程序里写的: // pages/splash/splash.js const app = getApp() Page({ data: { remainSecond: }, // 页面渲染完成后 ...
- Appium环境搭建(win/mac)
课程使用Windows+Android虚拟机, 建议使用Windows系统学习课程, 如使用Mac系统, 请另外准备一台Andorid手机 Windows系统Appium环境搭建 安装JDK并配置环境 ...
- Win10 + CLion + 树莓派 + QT 远程开发调用Python
原则:能在一个机器上开发的就不在两台机器上!! 首先需要配置远程QT开发环境 配置Cmake cmake_minimum_required(VERSION 3.14) project(qt_test) ...
- 如何检测域名是否被微信屏蔽 微信域名检测接口API是如何实现
微信域名检测技术的主要用户是微信域名防封,大家知道拼多多这种网站,靠诱导分享方式在微信里面摇身一变已经估值160亿美元,身价仅次于京东了 ,这是何等的速度,简直是惊为天人,but 如果你想玩微信病毒营 ...
- 如何优雅地防止MLE(for linux)
赛前最后一天模拟赛又有小伙伴MLE了--这里就讲一下如何较为精确地获取程序运行时间和空间. 资源统计当然是操作系统统计的最精确.所以可以这样写(noilinux实测通过,windows下应该不行): ...
- JAVA基础知识|HTTP协议-发展历程
HTTP 是基于 TCP/IP 协议的应用层协议.它不涉及数据包(packet)传输,主要规定了客户端和服务器之间的通信格式,默认使用80端口. 此文章为转载内容:http://www.ruanyif ...