public void Encrypt(string inputFilePath, string outputFilePath) { using (var block = new RC5Block(inputFilePath, outputFilePath, BB)) { // generate initialization vector var encryptedBlock = new byte[BB]; // // // Random.NextBytes(ref encryptedBlock); // // // block.PutBlock(encryptedBlock); byte[] inputBlock; while ((inputBlock = block.ReadBlock()) != null) { for (var i = 0; i < inputBlock.Length; i++) { inputBlock[i] = (byte)(inputBlock[i] ^ encryptedBlock[i]); } Encrypt(inputBlock, encryptedBlock); block.PutBlock(encryptedBlock); } } }
public void Decrypt(string inputFilePath, string outputFilePath) { using (var block = new RC5Block(inputFilePath, outputFilePath, BB)) { var initializationVector = block.ReadBlock(); var prevEncryptedBlock = new byte[BB]; Array.Copy(initializationVector, prevEncryptedBlock, (int)BB); byte[] encryptedBlock; var decryptedBlock = new byte[BB]; while ((encryptedBlock = block.ReadBlock()) != null) { Decrypt(encryptedBlock, decryptedBlock); for (var i = 0; i < decryptedBlock.Length; i++) { decryptedBlock[i] = (byte)(prevEncryptedBlock[i] ^ decryptedBlock[i]); } block.PutBlock(decryptedBlock); Array.Copy(encryptedBlock, prevEncryptedBlock, (int)BB); } } }