Тройное шифрование DES

Обратите внимание, что у меня проблема с размером ключа . Сначала, основываясь на комментариях, включенных в приведенный ниже код, я решил, что мой ключ должен быть 24 байта (192 бита). Это не сработало, поэтому я попробовал 16-, 32- и 8-байтовые ключи - похоже, ничего не работает. Под «не работает» я имею в виду, что после того, как мой текст был зашифрован и расшифрован, он не имеет того же значения, что и мой исходный текст.

Пример:

Исходный текст: «Пример проверки, это должно работать»

Зашифрованный текст: ¸ ¹pÕô6

Расшифрованный текст: «Пример»

Вот две функции Я использую (функции шифрования / дешифрования). Также я расскажу, как я вызываю каждую функцию.

        // 168-bit (three-key) 3DES (Triple-DES) encrypt a single 8-byte block (ECB mode)
        // plain-text should be 8-bytes, key should be 24 bytes.
        public byte[] TripleDesEncryptOneBlock(byte[] plainText, byte[] key)
        {
            // Create a new 3DES key.
            TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();

            // Set the KeySize = 192 for 168-bit DES encryption.
            // The msb of each byte is a parity bit, so the key length is actually 168 bits.

            des.KeySize = 192;
            des.Key = key;
            des.Mode = CipherMode.ECB;
            des.Padding = PaddingMode.None;

            ICryptoTransform ic = des.CreateEncryptor();

            byte[] enc = ic.TransformFinalBlock(plainText, 0, 8);

            return enc;
        }

        public byte[] TripleDesDecryptBlock(byte[] plainText, byte[] key)
        {
            // Create a new 3DES key.
            TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();

            // Set the KeySize = 192 for 168-bit DES encryption.
            // The msb of each byte is a parity bit, so the key length is actually 168 bits.
            des.KeySize = 192;
            des.Key = key;
            des.Mode = CipherMode.ECB;
            des.Padding = PaddingMode.None;

            ICryptoTransform ic = des.CreateDecryptor();

            byte[] dec = ic.TransformFinalBlock(plainText, 0, 8);

            return dec;
        }

// Encrypt Text
textBox5.Text = ByteToString(TripleDesEncryptOneBlock(StringToByte(textBox5.Text), StringToByte("1 2 3 4 5 6 7 8 9 1 1 2 ")));

// Decrypt Text
textBox5.Text = ByteToString(TripleDesDecryptBlock(StringToByte(textBox5.Text), StringToByte("1 2 3 4 5 6 7 8 9 1 1 2 ")));

Спасибо за любую помощь,

Эван

5
задан slugster 9 August 2011 в 01:13
поделиться