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-accelerator网站加速PHP缓冲的方法
Jul 30 PHP
php smarty的预保留变量总结
Dec 04 PHP
php面向对象全攻略 (七) 继承性
Sep 30 PHP
php XMLWriter类的简单示例代码(RSS输出)
Sep 30 PHP
php中取得文件的后缀名?
Feb 20 PHP
iis下php mail函数的sendmail配置方法(官方推荐)
Apr 25 PHP
PHP常用的文件操作函数经典收藏
Apr 02 PHP
ThinkPHP中的三大自动简介
Aug 22 PHP
Zend Framework常用校验器详解
Dec 09 PHP
php魔法函数与魔法常量使用介绍
Jul 23 PHP
PHP获取日期对应星期、一周日期、星期开始与结束日期的方法
Jun 22 PHP
Laravel登录失败次数限制的实现方法
Aug 26 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 数组的一个悲剧?
2011/05/11 PHP
采用PHP函数memory_get_usage获取PHP内存清耗量的方法
2011/12/06 PHP
PHP整合七牛实现上传文件
2015/07/03 PHP
php实现的Curl封装类Curl.class.php用法实例分析
2015/09/25 PHP
统计PHP目录中的文件数方法
2019/03/05 PHP
Js event事件在IE、FF兼容性问题
2011/01/01 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(三)情景对话中仿打字机输出文字
2013/01/23 Javascript
Jquery submit()无法提交问题
2013/04/21 Javascript
多种方法实现JS动态添加事件
2013/11/01 Javascript
包含中国城市的javascript对象实例
2015/08/03 Javascript
JavaScript Split()方法
2015/12/18 Javascript
第一次记录Bootstrap table学习笔记(1)
2017/05/18 Javascript
浅谈es6 javascript的map数据结构
2017/12/14 Javascript
vue select选择框数据变化监听方法
2018/08/24 Javascript
JS实现倒计时图文效果
2018/11/17 Javascript
详解服务端预渲染之Nuxt(介绍篇)
2019/04/07 Javascript
vue源码中的检测方法的实现
2019/09/26 Javascript
eslint+prettier统一代码风格的实现方法
2020/07/22 Javascript
解决谷歌搜索技术文章时打不开网页问题的python脚本
2013/02/10 Python
python基础教程之循环介绍
2014/08/29 Python
Python中利用Scipy包的SIFT方法进行图片识别的实例教程
2016/06/03 Python
Python基于高斯消元法计算线性方程组示例
2018/01/17 Python
python3.6+opencv3.4实现鼠标交互查看图片像素
2018/02/26 Python
python删除某个字符
2018/03/19 Python
python3.5绘制随机漫步图
2018/08/27 Python
pycharm恢复默认设置或者是替换pycharm的解释器实例
2018/10/29 Python
Python 实现自动导入缺失的库
2019/10/29 Python
django使用JWT保存用户登录信息
2020/04/22 Python
python Paramiko使用示例
2020/09/21 Python
Baby Tulai澳大利亚:美国婴儿背带品牌
2018/10/15 全球购物
学校七一活动方案
2014/01/19 职场文书
司法局群众路线教育实践活动开展情况总结
2014/10/25 职场文书
四风问题专项整治工作情况报告
2014/10/28 职场文书
党员带头倡议书
2015/04/29 职场文书
Go标准容器之Ring的使用说明
2021/05/05 Golang
Python中可变和不可变对象的深入讲解
2021/08/02 Python