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 :