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 相关文章推荐
真正的ZIP文件操作类(php)
Jul 21 PHP
中英文字符串翻转函数
Dec 09 PHP
php curl的深入解析
Jun 02 PHP
探讨PHP使用eAccelerator的API开发详解
Jun 09 PHP
8个PHP程序员常用的功能汇总
Dec 18 PHP
php读取flash文件高宽帧数背景颜色的方法
Jan 06 PHP
jQuery向下滚动即时加载内容实现的瀑布流效果
Jan 07 PHP
PHP页面间传递值和保持值的方法
Aug 24 PHP
php实现基于openssl的加密解密方法
Sep 30 PHP
PHP将英文数字转换为阿拉伯数字实例讲解
Jan 28 PHP
php+Ajax处理xml与json格式数据的方法示例
Mar 04 PHP
PHP字符串与数组处理函数用法小结
Jan 07 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
PHP执行linux命令常用函数汇总
2016/02/02 PHP
PHP实现多图上传(结合uploadify插件)思路分析
2016/11/30 PHP
php实现基于pdo的事务处理方法示例
2017/07/21 PHP
解决thinkPHP 5 nginx 部署时,只跳转首页的问题
2019/10/16 PHP
各种常用浏览器getBoundingClientRect的解析
2009/05/21 Javascript
jQuery bind事件使用详解
2011/05/05 Javascript
jquery zTree异步加载简单实例讲解
2016/02/25 Javascript
快速掌握Node.js之Window下配置NodeJs环境
2016/03/21 NodeJs
Angular表单验证实例详解
2016/10/20 Javascript
Json按某个键的值进行排序
2016/12/22 Javascript
彻底搞懂JavaScript中的apply和call方法(必看)
2017/09/18 Javascript
原生JS实现Ajax跨域请求flask响应内容
2017/10/24 Javascript
详解微信小程序input标签正则初体验
2018/08/18 Javascript
jquery判断滚动条距离顶部的距离方法
2018/09/05 jQuery
Puppeteer环境搭建的详细步骤
2018/09/21 Javascript
微信小程序使用websocket通讯的demo,含前后端代码,亲测可用
2019/05/22 Javascript
Django的session中对于用户验证的支持
2015/07/23 Python
对Python 窗体(tkinter)树状数据(Treeview)详解
2018/10/11 Python
pandas.DataFrame删除/选取含有特定数值的行或列实例
2018/11/07 Python
Python动态语言与鸭子类型详解
2019/07/01 Python
python tkinter实现彩球碰撞屏保
2019/07/30 Python
查看Python依赖包及其版本号信息的方法
2019/08/13 Python
pytorch神经网络之卷积层与全连接层参数的设置方法
2019/08/18 Python
Python类中的魔法方法之 __slots__原理解析
2019/08/26 Python
python 调用pyautogui 实时获取鼠标的位置、移动鼠标的方法
2019/08/27 Python
python标准库os库的函数介绍
2020/02/12 Python
使用pandas库对csv文件进行筛选保存
2020/05/25 Python
python实现PDF中表格转化为Excel的方法
2020/06/16 Python
CSS去掉A标签(链接)虚线框的方法
2014/04/01 HTML / CSS
法国综合购物网站:RueDuCommerce
2016/09/12 全球购物
美国最大的户外装备和服装购物网站:Backcountry
2019/10/15 全球购物
幼师自荐信
2013/10/26 职场文书
家电业务员岗位职责
2014/03/10 职场文书
庆祝新中国成立65周年“向国旗敬礼”网上签名寄语
2014/09/27 职场文书
合作与交流自我评价
2015/03/09 职场文书
php将xml转化对象的实例详解
2021/11/17 PHP