實作 OpenSSL 取代 Mcrypt 進行加密
在目前使用 Mcrypt 進行資料加密的 PHP 應用程式中,需要替換使用 OpenSSL 進行 McryptSSL 進行 McryptSSL 進行 McryptSSL 進行 McryptSSL 應用程式。最初的實作在 ECB 模式下使用河豚密碼,但由於不同的加密結果和所需的 IV 長度,用 OpenSSL 取代 Mcrypt 會帶來挑戰。
理解差異
兩者加密函數 mcrypt_encrypt 和 openssl_encrypt 會產生不同的結果。此外,mcrypt 需要 blowfish-ecb 的 56 位元組 IV,而 openssl 使用零長度 IV。這些差異源自於 Mcrypt (PKCS#5) 和 OpenSSL (PKCS#7) 所使用的不同填充演算法。
解決加密差異
減少加密差異,在使用 mcrypt 加密之前,需要使用 PKCS#7 填充手動填充資料。這確保了與 OpenSSL 使用的填充演算法的兼容性。以下範例示範了這種方法:
$key = "anotherpassword1"; $str = "does it work 12"; $enc = mcrypt_encrypt(MCRYPT_BLOWFISH, $key, $str."", MCRYPT_MODE_ECB); $dec = mcrypt_decrypt(MCRYPT_BLOWFISH, $key, $enc, MCRYPT_MODE_ECB); echo(bin2hex($enc).PHP_EOL); // Encrypted data var_dump($dec); // Decrypted data $enc = openssl_encrypt($str, 'bf-ecb', $key, true); $dec = openssl_decrypt($enc, 'bf-ecb', $key, true); echo(bin2hex($enc).PHP_EOL); // Encrypted data var_dump($dec); // Decrypted data
遷移注意事項
由於使用OpenSSL 解密透過Mcrypt 加密的資料是不切實際的,唯一的解決方案是重新加密資料。這帶來了巨大的遷移工作,因為所有先前加密的資料都必須使用 OpenSSL 重新加密。
以上是如何在 PHP 中從 Mcrypt 遷移到 OpenSSL 進行資料加密?的詳細內容。更多資訊請關注PHP中文網其他相關文章!