TripleDES Decryptor ничего не делает при первом вызове TransformBlock

Мне трудно понять, что здесь происходит. Код ниже преобразует массив байтов с помощью шифратора и преобразует его обратно с помощью дешифратора. Но первый вызов TransformBlock ничего не делает, а второй заполняет правильные значения. Любая идея, что я делаю неправильно, пожалуйста?

        Random random = new Random();
        ICryptoTransform encryptor, decryptor;

        byte[] key = new byte[16];
        byte[] iv = new byte[8];

        random.NextBytes(key);
        random.NextBytes(iv);

        TripleDESCryptoServiceProvider tripleDESCryptoServiceProvider = new TripleDESCryptoServiceProvider();
        encryptor = tripleDESCryptoServiceProvider.CreateEncryptor(key, iv);
        decryptor = tripleDESCryptoServiceProvider.CreateDecryptor(key, iv);

        byte[] data = new byte[8];
        random.NextBytes(data);

        byte[] crypted = new byte[8];
        byte[] decrypted = new byte[8];
        encryptor.TransformBlock(data, 0, 8, crypted, 0);
        decryptor.TransformBlock(crypted, 0, 8, decrypted, 0);
        decryptor.TransformBlock(crypted, 0, 8, decrypted, 0);

person amnesyc    schedule 20.11.2018    source источник
comment
Да, используйте TransformFinalBlock вместо этого. Без него код не знает, нужно ли распаковывать, и оставляет байты во внутреннем буфере.   -  person Maarten Bodewes    schedule 21.11.2018
comment
Я пробовал это: byte[] crypted = encryptor.TransformFinalBlock(data, 0, 8); byte[] decrypted = decryptor.TransformFinalBlock (зашифровано, 0, 8); Но я получаю исключение Bad Data   -  person amnesyc    schedule 22.11.2018
comment
Это правильно. Режим CBC, используемый по умолчанию, всегда дополняет, поэтому взамен вы получаете 16 байтов.   -  person Maarten Bodewes    schedule 22.11.2018
comment
Любой способ избежать этого?   -  person amnesyc    schedule 22.11.2018
comment
Да, нет : п   -  person Maarten Bodewes    schedule 22.11.2018
comment
Блин, должно было быть это Да. Вот шутка. Как дела?   -  person Maarten Bodewes    schedule 22.11.2018
comment
Я нашел этот код здесь, кажется, работает, но я не могу понять, что он делает: rextester.com/discussion/QSX88021/Des-шифрование   -  person amnesyc    schedule 23.11.2018
comment
Взгляд на случайный код шифрования, найденный в Интернете, никогда не является информативным, если только он не является частью конкретного ответа или используется для демонстрации концепции. Даже не ходите туда. Вы уже используете тройной DES и CBC, что не является хорошим знаком.   -  person Maarten Bodewes    schedule 23.11.2018
comment
Вы пытались настроить свой код с помощью PaddingMode.None?   -  person Maarten Bodewes    schedule 23.11.2018
comment
@MaartenBodewes Это действительно решило проблему, большое спасибо. Вы хотите поставить это как ответ?   -  person amnesyc    schedule 25.11.2018
comment
Нет, я рад, что вы решили эту проблему, но я думаю, что это больше отладка, чем что-либо еще, и на первоначальный вопрос, несомненно, уже есть ответ, скажем... этот.   -  person Maarten Bodewes    schedule 25.11.2018