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); } }