예제 #1
0
        /// <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();
                }
            }
        }