为了账号安全,请及时绑定邮箱和手机立即绑定

什么是 mcrypt_get_block 替代方案以及如何使用它

什么是 mcrypt_get_block 替代方案以及如何使用它

PHP
大话西游666 2021-07-13 17:01:44
我有一个使用 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_DATAOPENSSL_ZERO_PADDINGas 选项。

我看到的唯一其他问题是密钥是否太小或太大。在这种情况下,mcrypt lib 将填充零字节或修剪最右边的字节。因此,如果加密/解密失败,您可能需要自己执行此操作。

祝你好运,尽快摆脱这种可怕的协议和代码。


查看完整回答
反对 回复 2021-07-16
  • 2 回答
  • 0 关注
  • 402 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信