/// <summary> /// Encrypt file with IDEA encryption /// </summary> public void Encrypt() { GenerateKeys(); var md5 = MD5.Create().ComputeHash(SrcFileStream); CreateKeyFile(md5); //запись MD5 хеша в зашифрованный файл ResFileStream.Write(md5, 0, md5.Length); //шифрование файла SrcFileStream.Seek(0, SeekOrigin.Begin); ResFileStream.WriteByte((byte)(8 - (SrcFileStream.Length % 8))); for (long i = 0; i < SrcFileStream.Length; i += 8) { EncryptionRounds(); } ResFileStream.Flush(); }
/// <summary> /// Decrypt the file encrypted IDEA encryption /// </summary> /// <param name="SrcFileStream">Input file stream of the encrypted file</param> /// <param name="ResFileStream">Output file stream of the decrypted file</param> /// <param name="KeyFileStream">Input file stream of the key file</param> public void Decrypt() { GenerateKey(); SrcFileStream.Seek(17, SeekOrigin.Begin); ResFileStream.Seek(0, SeekOrigin.Begin); for (long i = 17; i < SrcFileStream.Length; i += 8) { DecryptionRounds(); } SrcFileStream.Seek(16, SeekOrigin.Begin); byte offset = (byte)SrcFileStream.ReadByte(); if (!(offset == 8)) { ResFileStream.SetLength(ResFileStream.Length - SrcFileStream.ReadByte()); } ResFileStream.Flush(); }