Blowfish шифрование / дешифрование только с первым символом ключа - PullRequest
0 голосов
/ 20 июня 2011

Я использую исходный код Брюса Шнайера для шифрования некоторых данных с помощью Blowfish.Кажется, все работает хорошо, за исключением того, что я заметил, что когда я шифрую с помощью 8-байтового ключа, его можно расшифровать с помощью первого символа этого 8-байтового ключа (например, зашифровать с помощью ключа «abcdefgh», и можно расшифровать с помощью «a»)).

Вот некоторые выдержки из моего кода:

Инициализация blowfish:

char key[] = "abcdefgh";
InitializeBlowfish(key, 1);

Затем я сохраняю свои входные данные в 8-байтовых блоках в двух объединениях, каждый из которых содержит четыресимволы и длинный знак без знака.

Затем я зашифровываю:

Blowfish_encipher(&(xl.l), &(xr.l));

Где xl.l и xr.l - каждый без знака длинный в моих двух союзах xl и xr.

Чтобы расшифровать:

Blowfish_decipher(&(xl.l), &(xr.l));

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

Что такоепроисходит?!

Спасибо за помощь.

1 Ответ

4 голосов
/ 20 июня 2011

Ссылки на исходный код, который я могу найти для blowfish, обычно указывает на то, что функция InitializeBlowfish определена примерно так:

int InitializeBlowfish(char *key, size_t len)

и может бытьвызывается с помощью например :

InitializeBlowfish(key_string_blowfish, strlen(key_string_blowfish));

Вместо того, чтобы в вашем случае вы указали длину ключа 1.

...