Будет ли TripleDes изменять размер данных

У меня есть код, который шифрует и дешифрует данные с помощью Triple DES. Все отлично работает с кодом.

У меня есть запрос с Тройной Des. Будет ли Triple DES изменять размер данных во время процесса шифрования. Я гуглил и был полностью смущен ответами, которые я получил.

это изменится. Если Да, значит, как найти размер зашифрованных данных.

Вот код:

unsigned char   initVector[8];
unsigned char*  block;
int     j;

    memset(initVector, 0xEE, sizeof(initVector));
    nBlocks = dwDataSize / 8;

    for (i=0; i < nBlocks; i++)
    {
        block = (unsigned char*) pData + i*8;
        memset(initVector, 0xEE, sizeof(initVector));
        des_ede3_cbc_encrypt((unsigned char *)block,(unsigned char *)block, 8,
                m_Schedule1 , m_Schedule2, m_Schedule3, (C_Block *)initVector, DES_ENCRYPT);

В другом обсуждении я видел, что размер изменится.

Вот ссылка. Длина зашифрованной строки

С уважением, Шива./

2 ответа

TripleDES является примитивом блочного шифра. Блочные шифры работают путем создания перестановки блока входных данных (который, как предполагается, неотличим от случайных данных) на основе ключа, который может быть изменен только в том случае, если ключ известен.

Таким образом, зашифрованные данные занимают столько же места, что и входные данные (за исключением, возможно, заполнения последнего блока). Типичные размеры блока - это любые степени от 2 до 4 байтов.

(Мысленный эксперимент: было бы невозможно, чтобы зашифрованный текст был короче входного, потому что тогда два разных ввода должны были бы отображаться на один и тот же зашифрованный текст, что невозможно. И наоборот, если зашифрованный текст был длиннее, тогда были бы определенные зашифрованные тексты, которые никогда не могут быть результатом шифрования, таким образом, не будучи "неотличимыми от случайных данных".)

Это зависит. Чтобы быть более точным, это зависит от следующих элементов:

  1. кодировка зашифрованного текста и простого текста
  2. режим шифрования
  3. режим заполнения и размер блока
  4. NONCE или IV
  5. (необязательный) тег аутентификации

3DES является блочным шифром. Это, по-видимому, случайная перестановка битов (в основном с использованием байтов в качестве минимального элемента). Один 3DES использует 64 бит /8 байт в качестве входных данных и генерирует тот же размер

Начнем с первого: если вы зашифруете фрагмент текста (символьную строку), вам необходимо сначала закодировать строку в байтах. Если вы ожидаете, что зашифрованный текст будет храниться в строке, вам нужно будет преобразовать результат в строку.

Далее идет режим шифрования: если это режим, который преобразует блочный шифр 3DES в потоковый шифр (например, CTR), то размер входного сигнала идентичен выходному размеру, исключая NONCE.

Тогда есть режим заполнения. Если вы используете шифрование в режиме ECB или CBC, то вы должны дополнить, если обычный текст имеет длину x, x % n != 0 а также n размер блока в байтах Если вы можете отличить обычный текст от отступов, то вы можете добавить 0 в n - 1 байты заполнения. Если вы не можете, то вам нужно всегда дополнять, добавляя 1 в n байты заполнения. Подкладка PKCS#5 (самая распространенная) всегда накладывается.

Обычно вам нужно также передать IV или NONCE. Оба они обычно примерно одинаковы с размером блока. Распространенным вариантом является добавление IV к зашифрованному тексту. Это часто выполняется для применяемого вами режима шифрования CBC. Единственный раз, когда вы не должны создавать новый (случайный) IV, это когда вы используете ключ только один раз.

Большую часть времени вы должны добавить защиту целостности зашифрованного текста. Если вы используете, например, шифрование в режиме GCM, вам понадобится дополнительное место для тега аутентификации. Если вы используете MAC или HMAC, то это должно быть включено поверх текста шифра.

Существует также такая вещь, как кража зашифрованного текста, с помощью которой можно избавиться от отступов. Наконец, вам может не потребоваться IV для определенных режимов одноблочного шифрования.

В вашем случае:

Если вы работаете с байтами, используете шифрование в режиме CBC, добавляете IV и используете заполнение PKCS#5, тогда вычисление будет (n) + ((x) + (n - x % n)), Для 3DES, n = 8,

Другие вопросы по тегам