aesmiyao php_PHP使用OpenSSL实现AES加密的笔记

记录这两天遇到的一些问题,一开始主要是对一些概念理解的不清楚

比如AES是一种算法,而OpenSSL是一个扩展库,其中包含对AES算法的实现

当然在完全理解算法后可以自己实现,但可能会遇到很多问题,我会在以后进行尝试

目前在项目的使用中,还是使用扩展库的方法最快最简单

1,加密方法:

通用的单钥加密算法为DES(Data Encryption Standard),通用的双钥加密算法为RSA( Rivest-Shamir-Adleman),都产生于上个世纪70年代。

目前用AES来代替DES(都是单钥)。

我选择使用AES算法来进行加密。

2,简单了解AES:

AES 有三种算法,主要是对数据块的大小存在区别:

AES-128:需要提供 16 位的密钥

AES-192:需要提供 24 位的密钥

AES-256:需要提供 32 位的密钥

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。

2: 讲php文件夹下的: php_openssl.dll, ssleay32.dll, libeay32.dll 3个文件拷贝到 WINDOWS\system32\  文件夹下。(注:所在子目录可能有所不同)

3: 重启apache或者iis(iisreset /restart)

至此,openssl功能就开启了。

5,添加范例代码:

如下:(作者来自思否captainblue)

1 classAES_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

就是这样

修改后可以将该类放入项目的扩展类库,进行公共使用,或是以中间件的方式进行通讯加密,以后更新这部分。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值