Шифрование DES 8-байтового обычного текста приводит к 16-байтовому массиву

Я использую этот код для шифрования 8-байтового обычного текста с помощью 8-байтового ключа, но результатом всегда является 16-байтовый массив.

public static byte[] Encrypt(byte[] PlainText, byte[] key)
{
    MemoryStream ms = new MemoryStream();
    DESCryptoServiceProvider mDES = new DESCryptoServiceProvider();
    mDES.Mode = CipherMode.ECB;
    mDES.Key = key;

    CryptoStream encStream = new CryptoStream(ms, mDES.CreateEncryptor(), CryptoStreamMode.Write);
    BinaryWriter bw = new BinaryWriter(encStream);

    bw.Write(PlainText);
    bw.Close();
    encStream.Close();

    byte[] buffer = ms.ToArray();
    ms.Close();

    return buffer;
}

Первые 8 байтов вывода - это то, что я ожидаю, но остальные я не знаю, что это такое ... что-то не так с этим кодом?


person eledu81    schedule 11.08.2009    source источник


Ответы (1)


Ввод будет дополнен размером блока следующий с использованием дополнения PKCS. Ввод 7 байт будет дополнен до 8. 8-15 до 16. 16-23 до 24 и так далее и тому подобное.

person Remus Rusanu    schedule 11.08.2009
comment
Отлично! Добавление mDES.Padding = PaddingMode.None работает.. Спасибо - person eledu81; 12.08.2009
comment
Это нормально, если вы знаете размер обычного текста. В противном случае вам понадобится специальный метод заполнения для определения размера простого текста (для других, просматривающих этот вопрос/ответ). - person Maarten Bodewes; 28.02.2012