php – MCrypt rijndael-128到OpenSSL aes-128-ecb转换
发布时间:2020-12-13 21:28:30 所属栏目:PHP教程 来源:网络整理
导读:由于Mcrypt已被弃用,我想在我的代码中使用OpenSSL,因为我们已经在我们的服务器中使用了 PHP 7.0.17并且没有告诉他们何时升级它. 某些第三方API(可能在PHP 5.x上托管并使用mcrypt)正在使用加密数据.他们提供了用于加密/解密字符串的方法. 他们是这样的 $secre
由于Mcrypt已被弃用,我想在我的代码中使用OpenSSL,因为我们已经在我们的服务器中使用了
PHP 7.0.17并且没有告诉他们何时升级它.
某些第三方API(可能在PHP 5.x上托管并使用mcrypt)正在使用加密数据.他们提供了用于加密/解密字符串的方法. 他们是这样的 $secret = 'a0a7e7997b6d5fcd55f4b5c32611b87c' ; public function encrypt128($str) { $block = mcrypt_get_block_size("rijndael_128","ecb"); $pad = $block - (strlen($str) % $block); $str .= str_repeat(chr($pad),$pad); return base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_128,$secret,$str,MCRYPT_MODE_ECB)); } public function decrypt128($str) { $str = base64_decode($str); $str = mcrypt_decrypt(MCRYPT_RIJNDAEL_128,MCRYPT_MODE_ECB); $len = strlen($str); $pad = ord($str[$len - 1]); return substr($str,strlen($str) - $pad); } 使用这些方法字符串small1如果加密变为v7IXp5vVaFVXXlt / MN8BVw == 我们想在我们这边使用openssl_encrypt,这样如果我们用OpenSSL加密相同的字符串,它必须给出与Mcrypt相同的结果.我研究过使用rijndael-128模式的mcrypt ecb应该与OpenSSL aes-128-ecb兼容. 在过去的几个小时里,我一直在尝试使用自己的方法来加密使用OpenSSL提供相同结果的字符串.到目前为止,我已经到了这里 public function sslEncrypt128($str) { $secret = 'a0a7e7997b6d5fcd55f4b5c32611b87c'; return base64_encode(openssl_encrypt($str,'aes-128-ecb',OPENSSL_RAW_DATA)); } 但它产生不同的字符串SxJ3 EdaeItZx3 / EwGTUbw ==与上述输入相同.我不知道它是标志的问题还是填充,任何指针都会受到欢迎. 我在这里添加了代码以在线测试https://3v4l.org/v2J2N 提前致谢. 解决方法
在您的具体示例中,我发现通过将aes-128-ecb更改为aes-256-ecb,它会产生与传统mcrypt_encrypt相同的输出.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |