在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
记录这两天遇到的一些问题,一开始主要是对一些概念理解的不清楚 比如AES是一种算法,而OpenSSL是一个扩展库,其中包含对AES算法的实现 当然在完全理解算法后可以自己实现,但可能会遇到很多问题,我会在以后进行尝试 目前在项目的使用中,还是使用扩展库的方法最快最简单
1,加密方法: 目前用AES来代替DES(都是单钥)。 我选择使用AES算法来进行加密。
2,简单了解AES: AES 有三种算法,主要是对数据块的大小存在区别: AES-128:需要提供 16 位的密钥 AES 是按数据块大小(128/192/256)对待加密内容进行分块处理的,会经常出现最后一段数据长度不足的场景,这时就需要填充数据长度到加密算法对应的数据块大小。
3,实现方式: AES本质是算法,下面需要想办法实现。 在PHP中,如果不自己实现算法的话,有两种方式可以调用AES算法进行加密 一个是MCrypt,一个是OpenSSL (PHP在7.2版本已经完全移除了MCrypt加密;PHP的OpenSSL扩展已经实现了AES加密算法,我们可以通过OpenSSL扩展提供的方法实现对数据的加密和解密) 我们选择OpenSSL
4,在PHP中加入OpenSSL扩展 因为还没有尝试Linux的OpenSSL安装,故这里只记录Window的成功安装方式。 步骤: 1: 首先检查php.ini中;extension=php_openssl.dll是否存在, 如果存在的话去掉前面的注释符‘;', 如果不存在这行,那么添加extension=php_openssl.dll。 至此,openssl功能就开启了。
5,添加范例代码: 如下:(作者来自思否captainblue) 1 class AES_128_CW { 2 private $_iv = ''; 3 private $_secret = ''; 4 5 public function __construct($iv,$secret){ 6 $this->_iv = substr($iv.'0000000000000000', 0,16);//可以忽略这一步,只要你保证iv长度是16 7 $this->_secret = hash('md5',$secret,true); 8 } 9 10 public function decode($secretData){ 11 return openssl_decrypt(urldecode($secretData),'aes-128-cbc',$this->_secret,false,$this->_iv); 12 } 13 14 public function encode($data){ 15 return urlencode(openssl_encrypt($data,'aes-128-cbc',$this->_secret,false,$this->_iv)); 16 } 17 } 6,进行测试 本地环境PHP版本是5.6.9,phpstudy 8.1 就是这样 修改后可以将该类放入项目的扩展类库,进行公共使用,或是以中间件的方式进行通讯加密,以后更新这部分。 |
2022-08-18
2022-07-18
2022-08-17
2022-08-17
2022-11-06
请发表评论