php实现的AES加密类定义与用法示例


Posted in PHP onJanuary 29, 2018

本文实例讲述了php实现的AES加密类定义与用法。分享给大家供大家参考,具体如下:

CryptAES.class.php文件:

<?php
class CryptAES
{
 protected $cipher = MCRYPT_RIJNDAEL_128;
 protected $mode = MCRYPT_MODE_ECB;
 protected $pad_method = NULL;
 protected $secret_key = '';
 protected $iv = '';
 public function set_cipher($cipher)
 {
 $this->cipher = $cipher;
 }
 public function set_mode($mode)
 {
 $this->mode = $mode;
 }
 public function set_iv($iv)
 {
 $this->iv = $iv;
 }
 public function set_key($key)
 {
 $this->secret_key = $key;
 }
 public function require_pkcs5()
 {
 $this->pad_method = 'pkcs5';
 }
 protected function pad_or_unpad($str, $ext)
 {
 if ( is_null($this->pad_method) )
 {
  return $str;
 }
 else
 {
  $func_name = __CLASS__ . '::' . $this->pad_method . '_' . $ext . 'pad';
  if ( is_callable($func_name) )
  {
  $size = mcrypt_get_block_size($this->cipher, $this->mode);
  return call_user_func($func_name, $str, $size);
  }
 }
 return $str;
 }
 protected function pad($str)
 {
 return $this->pad_or_unpad($str, '');
 }
 protected function unpad($str)
 {
 return $this->pad_or_unpad($str, 'un');
 }
 public function encrypt($str)
 {
 $str = $this->pad($str);
 $td = mcrypt_module_open($this->cipher, '', $this->mode, '');
 if ( empty($this->iv) )
 {
  $iv = @mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
 }
 else
 {
  $iv = $this->iv;
 }
 mcrypt_generic_init($td, $this->secret_key, $iv);
 $cyper_text = mcrypt_generic($td, $str);
 //$rt=base64_encode($cyper_text);
 $rt = bin2hex($cyper_text);
 mcrypt_generic_deinit($td);
 mcrypt_module_close($td);
 return $rt;
 }
 public function decrypt($str){
 $td = mcrypt_module_open($this->cipher, '', $this->mode, '');
 if ( empty($this->iv) )
 {
  $iv = @mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
 }
 else
 {
  $iv = $this->iv;
 }
 mcrypt_generic_init($td, $this->secret_key, $iv);
 $decrypted_text = mdecrypt_generic($td, self::hex2bin($str));
 //$decrypted_text = mdecrypt_generic($td, base64_decode($str));
 $rt = $decrypted_text;
 mcrypt_generic_deinit($td);
 mcrypt_module_close($td);
 return $this->unpad($rt);
 }
 public static function hex2bin($hexdata) {
 $bindata = '';
 $length = strlen($hexdata);
 for ($i=0; $i < $length; $i += 2)
 {
  $bindata .= chr(hexdec(substr($hexdata, $i, 2)));
 }
 return $bindata;
 }
 public static function pkcs5_pad($text, $blocksize)
 {
 $pad = $blocksize - (strlen($text) % $blocksize);
 return $text . str_repeat(chr($pad), $pad);
 }
 public static function pkcs5_unpad($text)
 {
 $pad = ord($text{strlen($text) - 1});
 if ($pad > strlen($text)) return false;
 if (strspn($text, chr($pad), strlen($text) - $pad) != $pad) return false;
 return substr($text, 0, -1 * $pad);
 }
}
?>

用法:

require_once("CryptAES.class.php");
$keyStr = 'ss4fs4skfhksk';
$aes = new CryptAES();
$keyStr = $aes->hex2bin($keyStr);
$aes->set_key($keyStr);
$aes->require_pkcs5();
$d = $aes->encrypt($data);

注:这里需要在php.ini中开启:extension=php_mcrypt.dll

PHP 相关文章推荐
php cout&amp;lt;&amp;lt;的一点看法
Jan 24 PHP
PHP开发中常用的三个表单验证函数使用小结
Mar 03 PHP
PHP 冒泡排序算法的实现代码
Aug 08 PHP
php自动给文章加关键词链接的函数代码
Nov 29 PHP
php使用curl和正则表达式抓取网页数据示例
Apr 13 PHP
php采用ajax数据提交post与post常见方法总结
Nov 10 PHP
jquery获取多个checkbox的值异步提交给php的方法
Jun 24 PHP
php异步:在php中使用fsockopen curl实现类似异步处理的功能方法
Dec 10 PHP
thinkPHP5.0框架环境变量配置方法
Mar 17 PHP
PHP针对伪静态的注入总结【附asp与Python相关代码】
Aug 01 PHP
ThinkPHP5.0框架结合Swoole开发实现WebSocket在线聊天案例详解
Apr 02 PHP
PHP的图像处理实例小结【文字水印、图片水印、压缩图像等】
Dec 20 PHP
php 判断IP为有效IP地址的方法
Jan 28 #PHP
Laravel中unique和exists验证规则的优化详解
Jan 28 #PHP
win10 apache配置虚拟主机后localhost无法使用的解决方法
Jan 27 #PHP
PHP设计模式之注册树模式分析
Jan 26 #PHP
PHP微信开发之微信录音临时转永久存储
Jan 26 #PHP
PHP CURL与java http使用方法详解
Jan 26 #PHP
php实现mysql连接池效果实现代码
Jan 25 #PHP
You might like
apache+mysql+php+ssl服务器之完全安装攻略
2006/09/05 PHP
正则表达式语法
2006/10/09 Javascript
ThinkPHP文件上传实例教程
2014/08/22 PHP
php实现用于删除整个目录的递归函数
2015/03/16 PHP
php实现window平台的checkdnsrr函数
2015/05/27 PHP
phpcmsv9.0任意文件上传漏洞解析
2020/10/20 PHP
任意位置显示html菜单
2007/02/01 Javascript
Javascript select下拉框操作常用方法
2009/11/09 Javascript
JQuery中form验证出错信息的查看方法
2013/10/08 Javascript
原生js实现简单的Ripple按钮实例代码
2017/03/24 Javascript
基于BootStrap实现简洁注册界面
2017/07/20 Javascript
JScript实现地址选择功能
2017/08/15 Javascript
如何理解Vue的render函数的具体用法
2017/08/30 Javascript
javascript+jQuery实现360开机时间显示效果
2017/11/03 jQuery
如何快速解决JS或Jquery ajax异步跨域的问题
2018/01/08 jQuery
jQuery实现的上拉刷新功能组件示例
2020/05/01 jQuery
python获取代码运行时间的实例代码
2018/06/11 Python
pyqt5 使用cv2 显示图片,摄像头的实例
2019/06/27 Python
OpenCV 模板匹配
2019/07/10 Python
python实现两个文件夹的同步
2019/08/29 Python
keras tensorflow 实现在python下多进程运行
2020/02/06 Python
pandas数据处理之绘图的实现
2020/06/15 Python
OpenCV图片漫画效果的实现示例
2020/08/18 Python
Python实现石头剪刀布游戏
2021/01/20 Python
在PyCharm中安装PaddlePaddle的方法
2021/02/05 Python
美国家用电器和电子产品商店:Abt
2016/09/06 全球购物
LightInTheBox法国站:中国跨境电商
2020/03/05 全球购物
如何找出EMP表里面SALARY第N高的employee
2013/12/05 面试题
一帮一活动总结
2014/05/08 职场文书
司法局火灾防控方案
2014/06/05 职场文书
企业员工爱岗敬业演讲稿
2014/08/26 职场文书
2014年高校辅导员工作总结
2014/12/09 职场文书
2016年第二十五次全国助残日活动总结
2016/04/01 职场文书
MySQL查看表和清空表的常用命令总结
2021/05/26 MySQL
如何在Mac上通过docker配置PHP开发环境
2021/05/29 PHP
Java spring定时任务详解
2021/10/05 Java/Android