對於我正在開發的項目,我需要使用Blowfish以跨NSIS和PHP的兼容方式對字符串進行加密和解密。NSIS和PHP之間的Blowfish加密郵件
目前我正在使用Blowfish++ plugin用於NSIS和mcrypt
庫與PHP。問題是,我無法讓他們都產生相同的輸出。
讓我們從NSIS Blowfish ++插件開始。基本上API是:
; Second argument needs to be base64 encoded
; base64_encode("12345678") == "MTIzNDU2Nzg="
blowfish::encrypt "[email protected]***" "MTIzNDU2Nzg="
Pop $0 ; 0 on success, 1 on failure
Pop $1 ; encrypted message on success, error message on failure
有沒有它是否是CBC,ECB,CFB等,提到我不與河豚不夠熟悉,可以通過讀取mostly undocumented source告訴。我認爲這是自PHP docs for mcrypt
tells me that ECB doesn't need an IV以來的歐洲央行。
我也通過閱讀Blowfish ++插件將Base64解碼第二個參數進行加密的源代碼(我不知道爲什麼)。它也返回一個Base64編碼的字符串。
對於事物的PHP方面,我基本上使用此代碼加密:
$plainText = "[email protected]***";
$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是什麼?
謝謝caf ...我會把這篇文章鏈接到NSIS插件網站上,以免其他程序員浪費時間使用破損版本。 – cdmckay 2010-01-28 20:30:32
+1真正的努力。 – 2010-01-29 00:42:36