php中AES加密解密的例子小结


Posted in PHP onFebruary 18, 2014

aesDemo.php:

例子,

<?php
require_once('./AES.php');
//$aes = new AES();
$aes = new AES(true);// 把加密后的字符串按十六进制进行存储
//$aes = new AES(true,true);// 带有调试信息且加密字符串按十六进制存储
$key = "this is a 32 byte key";// 密钥
$keys = $aes->makeKey($key);
$encode = "123456";// 被加密的字符串
$ct = $aes->encryptString($encode, $keys);
echo "encode = ".$ct."<br>";
$cpt = $aes->decryptString($ct, $keys);
echo "decode = ".$cpt;
?>

例子、AES加密类

<?php
//php aes加密类
class AESMcrypt {
public $iv = null;
public $key = null;
public $bit = 128;
private $cipher;
public function __construct($bit, $key, $iv, $mode) {
if(empty($bit) || empty($key) || empty($iv) || empty($mode))
return NULL;
$this->bit = $bit;
$this->key = $key;
$this->iv = $iv;
$this->mode = $mode;
switch($this->bit) {
case 192:$this->cipher = MCRYPT_RIJNDAEL_192; break;
case 256:$this->cipher = MCRYPT_RIJNDAEL_256; break;
default: $this->cipher = MCRYPT_RIJNDAEL_128;
} 
switch($this->mode) {
case 'ecb':$this->mode = MCRYPT_MODE_ECB; break;
case 'cfb':$this->mode = MCRYPT_MODE_CFB; break;
case 'ofb':$this->mode = MCRYPT_MODE_OFB; break;
case 'nofb':$this->mode = MCRYPT_MODE_NOFB; break;
default: $this->mode = MCRYPT_MODE_CBC;
}
}
public function encrypt($data) {
$data = base64_encode(mcrypt_encrypt( $this->cipher, $this->key, $data, $this->mode, $this->iv));
return $data;
}
public function decrypt($data) {
$data = mcrypt_decrypt( $this->cipher, $this->key, base64_decode($data), $this->mode, $this->iv);
$data = rtrim(rtrim($data), "..");
return $data;
}
}
//使用方法
$aes = new AESMcrypt($bit = 128, $key = 'abcdef1234567890', $iv = '0987654321fedcba', $mode = 'cbc');
$c = $aes->encrypt('haowei.me');
var_dump($aes->decrypt($c));

例子、附一个可加密可解密类

<?PHP
/**
 * AES加密、解密类
 * @author hushangming
 * 
 * 用法:
 * <pre>
 * // 实例化类
 * // 参数$_bit:格式,支持256、192、128,默认为128字节的
 * // 参数$_type:加密/解密方式,支持cfb、cbc、nofb、ofb、stream、ecb,默认为ecb
 * // 参数$_key:密钥,默认为abcdefghijuklmno
 * $tcaes = new TCAES(); 
 * $string = 'laohu';
 * // 加密
 * $encodeString = $tcaes->encode($string);
 * // 解密
 * $decodeString = $tcaes->decode($encodeString);
 * </pre>
 */
class TCAES{
 private $_bit = MCRYPT_RIJNDAEL_256;
 private $_type = MCRYPT_MODE_CBC;
 //private $_key = 'abcdefghijuklmno0123456789012345';
 private $_key = 'abcdefghijuklmno'; // 密钥
 private $_use_base64 = true;
 private $_iv_size = null;
 private $_iv = null; /**
  * @param string $_key 密钥
  * @param int $_bit 默认使用128字节
  * @param string $_type 加密解密方式
  * @param boolean $_use_base64 默认使用base64二次加密
  */
 public function __construct($_key = '', $_bit = 128, $_type = 'ecb', $_use_base64 = true){
  // 加密字节
  if(192 === $_bit){
   $this->_bit = MCRYPT_RIJNDAEL_192;
  }elseif(128 === $_bit){
   $this->_bit = MCRYPT_RIJNDAEL_128;
  }else{
   $this->_bit = MCRYPT_RIJNDAEL_256;
  }
  // 加密方法
  if('cfb' === $_type){
   $this->_type = MCRYPT_MODE_CFB;
  }elseif('cbc' === $_type){
   $this->_type = MCRYPT_MODE_CBC;
  }elseif('nofb' === $_type){
   $this->_type = MCRYPT_MODE_NOFB;
  }elseif('ofb' === $_type){
   $this->_type = MCRYPT_MODE_OFB;
  }elseif('stream' === $_type){
   $this->_type = MCRYPT_MODE_STREAM;
  }else{
   $this->_type = MCRYPT_MODE_ECB;
  }
  // 密钥
  if(!empty($_key)){
   $this->_key = $_key;
  }
  // 是否使用base64
  $this->_use_base64 = $_use_base64;
  $this->_iv_size = mcrypt_get_iv_size($this->_bit, $this->_type);
  $this->_iv = mcrypt_create_iv($this->_iv_size, MCRYPT_RAND);
 }
 /**
  * 加密
  * @param string $string 待加密字符串
  * @return string
  */
 public function encode($string){
  if(MCRYPT_MODE_ECB === $this->_type){
   $encodeString = mcrypt_encrypt($this->_bit, $this->_key, $string, $this->_type); 
  }else{
   $encodeString = mcrypt_encrypt($this->_bit, $this->_key, $string, $this->_type, $this->_iv);
  }
  if($this->_use_base64)
   $encodeString = base64_encode($encodeString);
  return $encodeString;
 }
 /**
  * 解密
  * @param string $string 待解密字符串
  * @return string
  */
 public function decode($string){
  if($this->_use_base64)
   $string = base64_decode($string);
  $string = $this->toHexString($string);
  if(MCRYPT_MODE_ECB === $this->_type){
   $decodeString = mcrypt_decrypt($this->_bit, $this->_key, $string, $this->_type);
  }else{
   $decodeString = mcrypt_decrypt($this->_bit, $this->_key, $string, $this->_type, $this->_iv);
  }
  return $decodeString;
 }
 /**
  * 将$string转换成十六进制
  * @param string $string
  * @return stream
  */
 private function toHexString ($string){
  $buf = "";
  for ($i = 0; $i < strlen($string); $i++){
   $val = dechex(ord($string{$i}));
   if(strlen($val)< 2)
    $val = "0".$val;
   $buf .= $val;
  }
  return $buf;
 }
 /**
  * 将十六进制流$string转换成字符串
  * @param stream $string
  * @return string
  */
 private function fromHexString($string){
  $buf = "";
  for($i = 0; $i < strlen($string); $i += 2){
   $val = chr(hexdec(substr($string, $i, 2)));
   $buf .= $val;
  }
  return $buf;
 }
}
PHP 相关文章推荐
一个从别的网站抓取信息的例子(域名查询)
Oct 09 PHP
在服务端进行目录建立、删除,文件上传、删除的过程的php代码
Sep 10 PHP
PHP源码之explode使用说明
Aug 05 PHP
php中数组首字符过滤功能代码
Jul 31 PHP
一个不易被发现的PHP后门代码解析
Jul 05 PHP
php文件操作之小型留言本实例
Jun 20 PHP
PHP开发中AJAX技术的简单应用
Dec 11 PHP
深入浅析php中sprintf与printf函数的用法及区别
Jan 08 PHP
PHP中常用的数组操作方法笔记整理
May 16 PHP
Yii2 rbac权限控制之rule教程详解
Jun 23 PHP
实例讲解php实现多线程
Jan 27 PHP
asp.net和php的区别点总结
Oct 10 PHP
jQuery中的RadioButton,input,CheckBox取值赋值实现代码
Feb 18 #PHP
PHP中ini_set和ini_get函数的用法小结
Feb 18 #PHP
php获取参数的几种方法总结
Feb 18 #PHP
PHP字符串中特殊符号的过滤方法介绍
Feb 18 #PHP
PHP对表单提交特殊字符的过滤和处理方法汇总
Feb 18 #PHP
PHP strip_tags()去除HTML、XML以及PHP的标签介绍
Feb 18 #PHP
php阻止页面后退的方法分享
Feb 17 #PHP
You might like
《魔兽争霸3:重制版》翻车了?你想要的我们都没有
2019/11/07 魔兽争霸
php获取地址栏信息的代码
2008/10/08 PHP
php preg_filter执行一个正则表达式搜索和替换
2012/02/27 PHP
用PHP解决的一个栈的面试题
2014/07/02 PHP
PHP微信开发之查询城市天气
2016/06/23 PHP
给大家分享几个常用的PHP函数
2017/01/15 PHP
CL vs ForZe BO5 第二场 2.13
2021/03/10 DOTA
JS 文件本身编码转换 图文教程
2009/10/12 Javascript
ExtJs设置GridPanel表格文本垂直居中示例
2013/07/15 Javascript
点击表单提交时出现jQuery没有权限的解决方法
2014/07/23 Javascript
零基础搭建Node.js、Express、Ejs、Mongodb服务器及应用开发入门
2014/12/20 Javascript
详细解读JavaScript的跨浏览器事件处理
2015/08/12 Javascript
基于javascript代码检测访问网页的浏览器呈现引擎、平台、Windows操作系统、移动设备和游戏系统
2015/12/03 Javascript
JS数组排序方法实例分析
2016/12/16 Javascript
jQuery+ajax的资源回收处理机制分析
2017/01/07 Javascript
浅谈Node Inspector 代理实现
2017/10/19 Javascript
解决Vue.js 2.0 有时双向绑定img src属性失败的问题
2018/03/14 Javascript
详解关于element级联选择器数据回显问题
2019/02/20 Javascript
在Vue中使用CSS3实现内容无缝滚动的示例代码
2020/11/27 Vue.js
python统计日志ip访问数的方法
2015/07/06 Python
详解python函数传参是传值还是传引用
2018/01/16 Python
python如何通过实例方法名字调用方法
2018/03/21 Python
python实现nao机器人手臂动作控制
2019/04/29 Python
Python Pandas实现数据分组求平均值并填充nan的示例
2019/07/04 Python
解决python3输入的坑——input()
2020/12/05 Python
HTML5实现预览本地图片
2016/02/17 HTML / CSS
美国钻石商店:Zales
2016/11/20 全球购物
俄罗斯首家面向中国消费者的一站式购物网站:Wruru
2020/05/08 全球购物
外贸实习生自荐信范文
2013/11/24 职场文书
少先队学雷锋活动月总结
2014/03/09 职场文书
离婚协议书怎么写
2014/09/12 职场文书
学习十八大标语
2014/10/09 职场文书
文案策划岗位职责
2015/02/11 职场文书
男方婚前保证书
2015/02/28 职场文书
主婚人致辞精选
2015/07/28 职场文书
Python基于Opencv识别两张相似图片
2021/04/25 Python