Для проекта, над которым я работаю, мне нужно зашифровать и расшифровать строку с помощью Blowfish совместимым образом через NSIS и PHP.
На данный момент я использую плагин Blowfish ++ для NSIS и библиотеку mcrypt
с PHP. Проблема в том, что я не могу заставить их обоих производить одинаковый вывод.
Давайте начнем с плагина NSIS Blowfish ++. В основном API это:
; Second argument needs to be base64 encoded
; base64_encode("12345678") == "MTIzNDU2Nzg="
blowfish::encrypt "test@test.com***" "MTIzNDU2Nzg="
Pop $0 ; 0 on success, 1 on failure
Pop $1 ; encrypted message on success, error message on failure
Нет никакого упоминания о том, является ли это CBC, ECB, CFB и т. Д., И я недостаточно знаком с Blowfish, чтобы иметь возможность узнать, прочитав в основном недокументированный источник . Я предполагаю, что это ECB, так как PHP документы для mcrypt
говорят мне, что ECB не нужен IV .
Из исходного кода я также узнал, что плагин Blowfish ++ будет Base64 декодировать второй аргумент для шифрования (я не уверен, почему). Он также возвращает строку в кодировке Base64.
Что касается PHP, я в основном использую этот код для шифрования:
$plainText = "test@test.com***";
$cipher = mcrypt_module_open(MCRYPT_BLOWFISH, '', MCRYPT_MODE_ECB, '');
$iv = '00000000'; // Show not be used anyway.
$key = "12345678";
$cipherText = "";
if (mcrypt_generic_init($cipher, $key, $iv) != -1)
{
$cipherText = mcrypt_generic($cipher, $plainText);
mcrypt_generic_deinit($cipher);
}
echo base64_encode($cipherText);
Однако, если я сделаю все это, я получу следующий вывод от каждого:
NSIS: GyCyBcUE0s5gqVDshVUB8w==
PHP: BQdlPd19zEkX5KT9tnF8Ng==
Что я делаю не так? Плагин NSIS не использует ECB? Если нет, то что он использует для IV?