public void CreateInitialVector() { Random random = new Random(); var aes = new RC6Engine(); InitialVector = new byte[aes.GetBlockSize()]; random.NextBytes(InitialVector); }
/// <summary> /// Encrypted the data. /// </summary> /// <param name="data">The data to encrypted.</param> /// <param name="passphrase">The passphrase key used to mask the data.</param> /// <returns>The encrypted data.</returns> public byte[] Encrypt(byte[] data, string passphrase) { // Create the key parameters. byte[] key = Encoding.Default.GetBytes(passphrase); Key.Crypto.Parameters.KeyParameter keyParameter = new KeyParameter(key); // Initialise the cryptography engine. Key.Crypto.Engines.RC6Engine rc6 = new RC6Engine(); rc6.Init(true, keyParameter); int dataLength = data.Length; int blockSize = rc6.GetBlockSize(); int modBlockSize = dataLength % blockSize; int blockCount = dataLength / blockSize; // If there is a remained then add en extra block count. if ((modBlockSize) > 0) { // Add one extra block. blockCount++; } // Encrypted data store. byte[] encryptedData = new byte[blockCount * blockSize]; byte[] decryptedData = new byte[blockCount * blockSize]; // Copy the decrypted data. for (int j = 0; j < dataLength; j++) { // Assign the data. decryptedData[j] = data[j]; } // For each block size in the the data. for (int i = 0; i < blockCount; i++) { // Encrypt the block. rc6.ProcessBlock(decryptedData, (i * blockSize), encryptedData, (i * blockSize)); } // Return the encrypted data. return(encryptedData); }