作为PHP 7.1.x 中废弃的特性之一,ext/mcrypt
.
mcrypt
扩展已经过时了大约10年,并且用起来很复杂。因此它被废弃并且被 OpenSSL 所取代。 从PHP 7.2起它将被从核心代码中移除并且移到PECL中。
如果懒得做兼容方案, 仍然可以通过PECL方式进行安装, 跟踪了一下这个库仍在在维护, 目前已经支持php8了. 安装地址: https://pecl.php.net/package/mcrypt
在做接口对接时, 一端加密且密钥是24位 ,另一端用的php7的 openssl_encrypt 同密钥来进行解密,发现解密不了。 资料显示openssl_encrypt 加密的密钥长度最高 16位; 超过16位的后面的不参与加密.
<?php
class AES
{
public static function encrypt($data, $key) {
$data = openssl_encrypt($data, 'aes-128-ecb', base64_decode($key), OPENSSL_RAW_DATA);
return base64_encode($data);
}
public static function decrypt($data, $key) {
$encrypted = base64_decode($data);
return openssl_decrypt($encrypted, 'aes-128-ecb', base64_decode($key), OPENSSL_RAW_DATA);
}
}
CBC 方式
<?php
class CBC
{
public function encrypt($data, $key, $iv)
{
return base64_encode(openssl_encrypt($data, "AES-128-CBC", $key, OPENSSL_RAW_DATA, $iv));
}
public function decrypt($data, $key, $iv)
{
return openssl_decrypt(base64_decode($data), "AES-128-CBC", $key, OPENSSL_RAW_DATA, $iv);
}
}
注意此方法对密钥密文做了base64的加密/解密的前置工作. 不需要的可以自行调整.