Mcrypt 是一个遗留加密库,由于安全漏洞和 OpenSSL 作为行业标准的出现而已经退役。虽然从 Mcrypt 切换到 OpenSSL 可能看起来令人畏惧,但可以通过了解关键差异并采取适当的策略来简化它。
Blowfish,您正在使用的密码,需要用于加密的数据填充。 OpenSSL 使用 PKCS#7 填充,而 Mcrypt 使用 PKCS#5。 PKCS#7 要求最小填充长度为 1,而 PKCS#5 接受 0。这种差异会影响从每个库获得的加密结果。
在 ECB 模式下,您可以使用在使用时,不需要初始化向量(IV)。然而,在其他加密模式中却并非如此。在 ECB 模式下使用 OpenSSL 时,请确保将 IV 长度设置为 0。
要使用 OpenSSL 解密使用 Mcrypt 加密的数据,需要在加密之前使用 PKCS#7 手动填充。这确保了两个库之间的兼容性。
提供的代码演示了关键差异和正确的填充技术:
$key = "anotherpassword1"; $str = "does it work 12"; // Mcrypt padding $enc = mcrypt_encrypt(MCRYPT_BLOWFISH, $key, $str."", MCRYPT_MODE_ECB); // OpenSSL padding $enc = openssl_encrypt($str, 'bf-ecb', $key, true); // Decrypt using both methods $dec_mcrypt = mcrypt_decrypt(MCRYPT_BLOWFISH, $key, $enc, MCRYPT_MODE_ECB); $dec_openssl = openssl_decrypt($enc, 'bf-ecb', $key, true); echo bin2hex($enc) . PHP_EOL; var_dump($dec_mcrypt); echo PHP_EOL; var_dump($dec_openssl);
此代码演示了成功的加密和解密同时使用 Mcrypt 和 OpenSSL,应用 PKCS#7 填充以实现兼容性。
以上是如何将 Mcrypt 加密转换为 OpenSSL 加密:分步指南的详细内容。更多信息请关注PHP中文网其他相关文章!