php openssl aes ecb,php – MCrypt rijndael-128到OpenSSL aes-128-ecb转换

本文探讨了在PHP代码中从弃用的Mcrypt库转向OpenSSL的过程,尤其是当需要与使用Mcrypt加密的第三方API保持兼容时。作者分享了他们的尝试,包括使用rijndael-128和aes-128-ecb模式,并展示了如何调整现有加密方法以获得相同的结果。目前遇到的问题是加密输出不匹配,可能是填充或选项设置导致的。寻求帮助以解决这个问题。
摘要由CSDN通过智能技术生成

由于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, $secret, $str, MCRYPT_MODE_ECB);

$len = strlen($str);

$pad = ord($str[$len - 1]);

return substr($str, 0, 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', $secret, OPENSSL_RAW_DATA));

}

但它产生不同的字符串SxJ3 EdaeItZx3 / EwGTUbw ==与上述输入相同.我不知道它是标志的问题还是填充,任何指针都会受到欢迎.

提前致谢.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值