加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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相同的输出.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读