public string TripleDESforFile(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))
{
PasswordDeriveBytes oPasswordDeriveBytes = new PasswordDeriveBytes(key, Encoding.UTF8.GetBytes(FormatStringLength(IV, 8, '9')));
TripleDESCryptoServiceProvider oTDES = new TripleDESCryptoServiceProvider();
oTDES.Mode = CipherMode.CBC;
oTDES.Padding = PaddingMode.PKCS7;
//Create the key and set it to the Key property of the TripleDESCryptoServiceProvider object.
oTDES.Key = oPasswordDeriveBytes.GetBytes(24); //must 24 bytes
oTDES.IV = oPasswordDeriveBytes.GetBytes(8); //must 8 bytes
// 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, oTDES.CreateEncryptor(), CryptoStreamMode.Write) :
oCryptoStream = new CryptoStream(fsOutput, oTDES.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();
oTDES.Clear();
}
}
return "Success";
}
catch (CryptographicException cex)
{
return cex.Message;
}
catch (IOException ioe)
{
return ioe.Message;
}
catch (Exception ex)
{
return ex.Message;
}
}6/13/2011 updated:
Use the PasswordDeriveBytes class to generate the Key and IV for the 3DES.
The best piece of code in the Web to Encrypt/Decrypt files.
ReplyDelete