Это не тот случай в вашем коде, где вы хотите преобразовать отдельный блок, и поэтому вы должны использовать вместо этого метод TransformFinalBlock. Кстати, я позволил себе сделать ваш образец готовым к использованию.

я есть рабочая реализацияTripleDESCng (проверено на некоторых тестовых векторах), но происходит следующее:

Когда я шифрую простой текстThis is a sample message (24 байта, таким образом, для этого это будет 3 блока) (шестнадцатеричный для него5468697320697320612073616D706C65206D657373616765) с примером ключа, я получаюE81F113DD7C5D965E082F3D42EC1E2CA39BCDBCCBC0A2BD9, Однако, когда я расшифровываю это с тем же ключом примера, я получаю5468697320697320612073616D706C650000000000000000, который при преобразовании обратно в ASCII, является:

This is a sample.

Любая причина, кроме моего кода, почему это будет вести себя так? Для шифрования и дешифрования я использую 24-байтовые ключи (режим ECB).

РЕДАКТИРОВАТЬ:

using (var tripleDES = new TripleDESCryptoServiceProvider())
{
   byte[] data = ASCIIEncoding.ASCII.GetBytes("This is a sample message");
   Console.WriteLine(BitConverter.ToString(data));
   tripleDES.IV = new byte[tripleDES.BlockSize / 8];
   var encryptor = tripleDES.CreateEncryptor();
   byte[] result = new byte[data.Length];
   encryptor.TransformBlock(data, 0, data.Length, result, 0);
   var decryptor = tripleDES.CreateDecryptor();
   byte[] result2 = new byte[result.Length];
   decryptor.TransformBlock(result, 0, result.Length, result2, 0);
   Console.WriteLine(BitConverter.ToString(result2));
}
Console.ReadLine();

Ответы на вопрос(1)

Ваш ответ на вопрос