длина блока на входе 64 bit.
byte[] testArray = { 0,0,0,0,0,0,0,0};
алгоритм для кодирования DES ECB
public static byte[] Encrypt(byte[] bytesForEncyption)
{
DES desAlg = DES.Create();
desAlg.Mode = CipherMode.ECB;
desAlg.Padding = PaddingMode.PKCS7;
desAlg.Key = Encoding.ASCII.GetBytes("11223344");
desAlg.BlockSize = 64;
using(MemoryStream ms = new MemoryStream())
{
using(CryptoStream cs = new CryptoStream(ms, desAlg.CreateEncryptor(), CryptoStreamMode.Write))
{
cs.Write(bytesForEncyption, 0, bytesForEncyption.Length);
cs.FlushFinalBlock();
return ms.ToArray();
}
}
}
На выходе получаю 128 bit зашифрованных данных. Хотя должно быть 64 bit
в чём ошибка?
Всё верно, вы установили desAlg.Padding = PaddingMode.PKCS7, а он должен дополнить сообщение до полного блока. Так как предыдущий блок уже полностью занят, то идет дополнение новым блоком. Вы можете выставить desAlg.Padding = PaddingMode.None, тогда получите 8 байт на выходе.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей