Ejemplo n.º 1
0
 // note: this method is garanteed to be called with a valid blocksize
 // for both input and output
 protected override void ECB(byte[] input, byte[] output)
 {
     DESTransform.Permutation(input, output, DESTransform.ipTab, false);
     if (encrypt)
     {
         E1.ProcessBlock(output, output);
         D2.ProcessBlock(output, output);
         E3.ProcessBlock(output, output);
     }
     else
     {
         D1.ProcessBlock(output, output);
         E2.ProcessBlock(output, output);
         D3.ProcessBlock(output, output);
     }
     DESTransform.Permutation(output, output, DESTransform.fpTab, true);
 }
Ejemplo n.º 2
0
        public TripleDESTransform(TripleDES algo, bool encryption, byte[] key, byte[] iv)
            : base(algo, encryption, iv)
        {
            if (key == null)
            {
                key = GetStrongKey();
            }
            // note: checking weak keys also checks valid key length
            if (TripleDES.IsWeakKey(key))
            {
                string msg = Locale.GetText("This is a known weak key.");
                throw new CryptographicException(msg);
            }

            byte[] key1 = new byte[8];
            byte[] key2 = new byte[8];
            byte[] key3 = new byte[8];
            DES    des  = DES.Create();

            Buffer.BlockCopy(key, 0, key1, 0, 8);
            Buffer.BlockCopy(key, 8, key2, 0, 8);
            if (key.Length == 16)
            {
                Buffer.BlockCopy(key, 0, key3, 0, 8);
            }
            else
            {
                Buffer.BlockCopy(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);
            }
        }
Ejemplo n.º 3
0
 public override void GenerateKey()
 {
     KeyValue = DESTransform.GetStrongKey();
 }