public TripleDESTransform(TripleDES algo, bool encryption, byte[] key, byte[] iv) : base(algo, encryption, iv) { byte[] key1 = new byte [8]; byte[] key2 = new byte [8]; byte[] key3 = new byte [8]; DES des = DES.Create(); Array.Copy(key, 0, key1, 0, 8); Array.Copy(key, 8, key2, 0, 8); if (key.Length == 16) { Array.Copy(key, 0, key3, 0, 8); } else { Array.Copy(key, 16, key3, 0, 8); } // note: some modes (like CFB) requires encryption when decrypting if ((encryption) || (algo.Mode == CipherMode.CFB)) { E1 = new DESTransform(des, true, key1, iv); D2 = new DESTransform(des, false, key2, iv); E3 = new DESTransform(des, true, key3, iv); } else { D1 = new DESTransform(des, false, key3, iv); E2 = new DESTransform(des, true, key2, iv); D3 = new DESTransform(des, false, key1, iv); } }
public TripleDESTransform(TripleDES algo, bool encryption, byte[] key, byte[] iv) : base(algo, encryption, iv) { byte[] key1 = new byte [8]; byte[] key2 = new byte [8]; byte[] key3 = new byte [8]; DES des = DES.Create (); Array.Copy (key, 0, key1, 0, 8); Array.Copy (key, 8, key2, 0, 8); if (key.Length == 16) Array.Copy (key, 0, key3, 0, 8); else Array.Copy (key, 16, key3, 0, 8); // note: some modes (like CFB) requires encryption when decrypting if ((encryption) || (algo.Mode == CipherMode.CFB)) { E1 = new DESTransform (des, true, key1, iv); D2 = new DESTransform (des, false, key2, iv); E3 = new DESTransform (des, true, key3, iv); } else { D1 = new DESTransform (des, false, key3, iv); E2 = new DESTransform (des, true, key2, iv); D3 = new DESTransform (des, false, key1, iv); } }