php如何利用openssl加密解密AES-CBC数据?mcrypt替代方案
发布于 作者:苏南大叔 来源:程序如此灵动~

在上文中,苏南大叔留了个伏笔,因为在最新的php73
中,已经全面禁用了mcrypt
系列函数。所以,问题来了,mcrypt.so
的加密解密替代方案是什么呢?本文中,苏南大叔就说说mcrypt.so
扩展加密解密的一个可能替代方案openssl
。

本文测试环境:centos
/php72
/libssl.so
。openssl
对于php
来说,就是libssl.so
扩展。这个扩展一般都是内置的。如果发生了一些奇怪的错误的话,请检查是否正确安装了libssl
。这里有篇安装的教程,大家可以作为参考:
基础定义
由于前一篇文章中的两组数据都不是太符合要求,这里,苏南大叔启用的是新的一组数据。本文中的数据配置为:
对于本文中的AES-128-CBC
来说,它要求$iv
的长度是16位。所以对于一些人来说,把$key
设置的长一些,然后把$iv
设置为截取前16位,也是一个不错的主意。
openssl_decrypt
解密

openssl_encrypt
加密

额外说明
$iv
对于AES-128-CBC
来说,$iv
的长度是16位。不过有很多不同的加密模式,每个模式的$iv
长度都是不一致的。所以下面的代码仅供参考:
base64
关于base64
,主要是这些加密完的数据,对于程序员来说,是乱码。所以base64
一下便于传输。
加密模式
加密模式其实有好多的,并不仅仅是一个AES-128-CBC
。可以通过下面的途径,查看所有支持的加密模式:
在苏南大叔的本次测试中,共有190种模式返回了。
OPENSSL_RAW_DATA
而关于OPENSSL_RAW_DATA
,目前已知的是,还有一个兄弟值叫做OPENSSL_ZERO_PADDING
。其它值以及相互之间的区别,苏南大叔暂未研究,待测。
总结
这里的话题,比较偏门,苏南大叔就不更多深入展开了,大家如果感兴趣,请自行查阅相关文档。


