我有一个使用 symfony 框架构建的旧 wordpress 插件,它使用mcrypt_get_block_size('tripledes', 'ecb'). 但是,我刚刚将服务器上的 php 升级到 7.3 版,现在我得到了一个Fatal error: Call to undefined function HealthShieldForm\mcrypt_encrypt().我读过几篇他们建议使用openssl_encrypt(). 不幸的是,我不知道从哪里开始用彼此替换功能并确保我得到相同的结果。我目前的代码是这样的:private function encrypt($data) { //Pad for PKCS7 $blockSize = mcrypt_get_block_size('tripledes', 'ecb'); $len = strlen($data); $pad = $blockSize - ($len % $blockSize); $data .= str_repeat(chr($pad), $pad); //Encrypt data $encData = mcrypt_encrypt('tripledes', $this->key, $data, 'ecb'); return base64_encode($encData); } private function decrypt($data) { $data = base64_decode($data); $data = mcrypt_decrypt('tripledes', $this->key, $data, 'ecb'); $block = mcrypt_get_block_size('tripledes', 'ecb'); $len = strlen($data); $pad = ord($data[$len - 1]); return substr($data, 0, strlen($data) - $pad); }更新我改编了彼得的例子来反映我的代码:function encrypt($data) { $ciphertext = openssl_encrypt($data, 'des-ede3-ecb', $this->key, OPENSSL_RAW_DATA); return base64_encode($ciphertext); } function decrypt($data) { $ciphertext = base64_decode($data); $plaintext = openssl_decrypt($ciphertext, 'des-ede3-ecb', $this->key, OPENSSL_RAW_DATA); return $plaintext; }但是,现在我收到此错误: Warning: openssl_encrypt(): Unknown cipher algorithm
2 回答
繁星coding
TA贡献1797条经验 获得超4个赞
您正在使用带有 PKCS#5 / 7 填充的 ECB(未明确提及,但这是手动应用的填充)。该填充是 OpenSSL 的默认值,因此您只需使用'des-ede3'
withoutOPENSSL_RAW_DATA
和OPENSSL_ZERO_PADDING
as 选项。
我看到的唯一其他问题是密钥是否太小或太大。在这种情况下,mcrypt lib 将填充零字节或修剪最右边的字节。因此,如果加密/解密失败,您可能需要自己执行此操作。
祝你好运,尽快摆脱这种可怕的协议和代码。
- 2 回答
- 0 关注
- 402 浏览
添加回答
举报
0/150
提交
取消