Я использую исходный код Брюса Шнайера для шифрования некоторых данных с помощью 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));
И обратите внимание, что он не расшифровывает, если ключ является чем-то случайным, только если это правильный ключ или его первый байт.
Что такоепроисходит?!
Спасибо за помощь.