Это не тот случай в вашем коде, где вы хотите преобразовать отдельный блок, и поэтому вы должны использовать вместо этого метод 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();