c# DES ECB mode длина зашифрованного блока больше 64 bit

92
07 января 2022, 19:00

длина блока на входе 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

в чём ошибка?

Answer 1

Всё верно, вы установили desAlg.Padding = PaddingMode.PKCS7, а он должен дополнить сообщение до полного блока. Так как предыдущий блок уже полностью занят, то идет дополнение новым блоком. Вы можете выставить desAlg.Padding = PaddingMode.None, тогда получите 8 байт на выходе.

READ ALSO
Не запускается приложение после клика по кнопке [закрыт]

Не запускается приложение после клика по кнопке [закрыт]

Хотите улучшить этот вопрос? Добавьте больше подробностей и уточните проблему, отредактировав это сообщение

110
Quartz.NET в трехуровневой архитектуре. С#

Quartz.NET в трехуровневой архитектуре. С#

Есть класс, который унаследован от интерфейса IJobЭкемпляр этого класса у меня создается через реализацию интерфейс

99
Как сохранить картинку на сервере по ее URL?

Как сохранить картинку на сервере по ее URL?

Есть адрес картинки, например http://sitecom/images/image

181