【发布时间】:2011-01-10 06:08:15
【问题描述】:
对于我正在进行的项目,我需要使用 Blowfish 以兼容 NSIS 和 PHP 的方式加密和解密字符串。
目前我将Blowfish++ plugin 用于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 还不够熟悉,无法通过阅读 mostly undocumented source 来判断。我认为它是自 PHP docs for mcrypt tells me that ECB doesn't need an 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 吗?如果不是,它的静脉注射用的是什么?
【问题讨论】:
标签: php c++ encryption nsis blowfish