实现 OpenSSL 代替 Mcrypt 进行加密
在当前使用 Mcrypt 进行数据加密的 PHP 应用程序中,需要替换使用 OpenSSL 进行 Mcrypt。最初的实现在 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中文网其他相关文章!