Blowfish C++ работает с меньшим количеством букв, а Blowfish C# — нет.

Blowfish C++ поддерживает шифрование блока с менее чем ‹ 8 буквами, а .NET — нет. Почему?

-->C# NET Blowfish‹-- --> C++ Blowfish‹--

В приложениях C++ и C# я шифрую следующий массив

    byte response[6] = 
    {
        0x00, 0x80, 0x01, 0x61, 0x05, 0x06
    };

В обоих приложениях C++ и C# я вызываю функцию Encrypt с одинаковыми параметрами.

C++
Blowfish.Encrypt((LPBYTE)responce + 2,(LPBYTE)responce + 2, 4);

C#
Blowfish.Encrypt(responce, 2, responce, 2, responce.Length - 2);

Однако в С++ я получаю зашифрованные данные, но не в С#.

Строки 45,47 и 49 в C# NET Blowfish являются проблемными строками, после вычисления в строке 45 - результат становится 0. строка 47 становится 2 + 0 = 2, а строка 49 2 не меньше 2, поэтому цикла нет.

В Blowfish на С++ есть некоторые дополнения, но я теряюсь, когда пытаюсь понять это.

Моя проблема в том, что в C# заполнение должно быть точно таким же, как в C++, поэтому я получаю правильный ответ. зашифрованный массив не мой.

Не могли бы вы указать мне, какие отступы используются в Blowfish C++ и как это должно быть реализовано в C# NET.

//Обратите внимание, что мне не нужно отправлять этот пакет несколько раз, только один раз.

Заранее спасибо!


person Ivan Prodanov    schedule 01.04.2009    source источник
comment
stackoverflow.com/questions/692810/ - возможно, это может дать вам ключ   -  person Konstantin Tarkus    schedule 01.04.2009


Ответы (1)


Код, который вы вставили (кстати, не рекомендуется для SO, так как ваша вставка будет удалена, если ее никто не прочитает через некоторое время, тем самым оставив этот вопрос неработающим), говорит в своем заголовочном комментарии:

/// Note that the number of bytes must be adjusted to the block size of the algorithm.

(строки 3 и 4). Так что, похоже, он ведет себя по спецификации, если игнорирует ваши данные меньшего размера.

Код С++, кажется, дополняется нулевыми байтами, в комментарии говорится:

// pad end of data with null bytes to complete encryption

Было бы полезно увидеть функцию C++ GetOutputLength(), чтобы увидеть, как она обрабатывает входные данные меньшего размера. Я предполагаю, что это округляется вверх, но было бы неплохо проверить.

person unwind    schedule 01.04.2009
comment
@unwind, спасибо за помощь! Функцию можно посмотреть здесь -›› pastebin.com/m71b97dc6 буду редактировать мой вопрос, когда я получу действительный ответ, так что в будущем он останется в живых. - person Ivan Prodanov; 01.04.2009