C# Encrypting/Decrypting with Stream
This C# example demonstrates how to use Chilkat.Crypt2 to encrypt and decrypting using the .NET FileStream class:
Chilkat.Crypt2 crypt = new Chilkat.Crypt2();
bool success = crypt.UnlockComponent("Anything for 30-day trial");
if (!success)
{
MessageBox.Show(crypt.LastErrorText);
return;
}
crypt.CryptAlgorithm = "aes";
crypt.CipherMode = "cbc";
crypt.KeyLength = 128;
crypt.SetEncodedIV("0000000000000000", "hex");
crypt.SetEncodedKey("abcdefghijklmnop", "ascii");
// Open input and output files as file streams...
FileStream fsIn = File.OpenRead("hamlet.xml");
FileStream fsOut = File.Create("encrypted.dat");
crypt.FirstChunk = true;
crypt.LastChunk = false;
byte [] encryptedChunk;
// Encrypt the stream in 1024 byte chunks.
byte[] b = new byte[1024];
int n;
while ((n = fsIn.Read(b, 0, b.Length)) > 0)
{
if (n < b.Length)
{
// Don't encrypt the full 1024 bytes, only the amount read...
byte[] tmp = new byte[n];
int i;
for (i = 0; i < n; i++) tmp[i] = b[i];
encryptedChunk = crypt.EncryptBytes(tmp);
}
else
{
encryptedChunk = crypt.EncryptBytes(b);
}
fsOut.Write(encryptedChunk, 0, encryptedChunk.Length);
crypt.FirstChunk = false;
}
fsIn.Close();
// Flush any remaining encrypted data.
crypt.LastChunk = true;
byte[] empty = { };
encryptedChunk = crypt.EncryptBytes(empty);
if (encryptedChunk.Length > 0)
{
fsOut.Write(encryptedChunk, 0, encryptedChunk.Length);
}
fsOut.Close();
// Now decrypt in chunks. The decryptor must know when the last
// block is being processed so it may unpad it correctly.
System.IO.FileInfo fi = new System.IO.FileInfo("encrypted.dat");
long fileSize = fi.Length;
int numChunks = (int)fileSize / b.Length;
fsIn = File.OpenRead("encrypted.dat");
fsOut = File.Create("decrypted.xml");
crypt.FirstChunk = true;
crypt.LastChunk = false;
byte[] decryptedChunk;
int idx;
for (idx = 0; idx <= numChunks; idx++)
{
n = fsIn.Read(b, 0, b.Length);
// Is this the last chunk?
if (idx == numChunks)
{
// Decrypt only the amount read...
byte[] lastBlock = new byte[n];
int i;
for (i = 0; i < n; i++) lastBlock[i] = b[i];
crypt.LastChunk = true;
decryptedChunk = crypt.DecryptBytes(lastBlock);
}
else
{
decryptedChunk = crypt.DecryptBytes(b);
}
fsOut.Write(decryptedChunk, 0, decryptedChunk.Length);
crypt.FirstChunk = false;
}
fsIn.Close();
fsOut.Close();
MessageBox.Show("Finished!");
admin
0
Tags :