/// <summary> /// /// </summary> public static void Transform(string path, string keyPath, int bufferLength = BufferLength) { if (string.IsNullOrEmpty(path)) { throw new ArgumentNullException(nameof(path)); } if (string.IsNullOrEmpty(keyPath)) { throw new ArgumentNullException(nameof(keyPath)); } if (!File.Exists(path)) { throw new FileNotFoundException(path); } if (!File.Exists(keyPath)) { throw new FileNotFoundException(keyPath); } if (new FileInfo(path).Length > new FileInfo(keyPath).Length) { throw new FileLengthGreaterThanKeyLengthException(); } using (var keyStream = new FileStream(keyPath, FileMode.Open)) { var readWriter = new SynchronizedReadWriter(path); var keyBytes = new byte[bufferLength]; while (!readWriter.WriteComplete) { readWriter.Read(keyBytes.Length); if (readWriter.GetBuffer().Length < keyBytes.Length) { keyBytes = new byte[readWriter.GetBuffer().Length]; } keyStream.Read(keyBytes, 0, keyBytes.Length); readWriter.SetBuffer(Xor(readWriter.GetBuffer(), keyBytes)); readWriter.Write(); } } }