public string AESforFile(string inputFilename, string outputFilename, string key, string IV, bool toEncrypt) { try { using (FileStream fsInput = new FileStream(inputFilename, FileMode.Open, FileAccess.Read)) { using (FileStream fsOutput = new FileStream(outputFilename, FileMode.Create, FileAccess.Write)) { RijndaelManaged oAES = new RijndaelManaged(); Rfc2898DeriveBytes oRfc2898DeriveBytes = new Rfc2898DeriveBytes(key + strSalt, Encoding.UTF8.GetBytes(IV)); oAES.Padding = PaddingMode.PKCS7; oAES.Mode = CipherMode.CBC; oAES.KeySize = 256; oAES.Key = oRfc2898DeriveBytes.GetBytes(32); oAES.BlockSize = 128; oAES.IV = oRfc2898DeriveBytes.GetBytes(16); // Now create a crypto stream through which we are going // to be pumping data. // The fsOutput is going to be receiving the encrypted bytes. CryptoStream oCryptoStream = toEncrypt ? oCryptoStream = new CryptoStream(fsOutput, oAES.CreateEncryptor(), CryptoStreamMode.Write) : oCryptoStream = new CryptoStream(fsOutput, oAES.CreateDecryptor(), CryptoStreamMode.Write); // Now will will initialize a buffer and will be processing the input file in chunks. // This is done to avoid reading the whole file (which can be huge) into memory. int bufferLen = 4096; byte[] buffer = new byte[bufferLen]; int bytesRead; do { // read a chunk of data from the input file bytesRead = fsInput.Read(buffer, 0, bufferLen); // encrypt it oCryptoStream.Write(buffer, 0, bytesRead); } while (bytesRead != 0); oCryptoStream.Close(); oAES.Clear(); } } return "Success"; } catch (CryptographicException cex) { return cex.Message; } catch (IOException ioe) { return ioe.Message; } }
2009/04/13
AES File Encryption/Decryption
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment