您当前的位置: 首页 > 网站编程 > PHP教程 > php中AES加密解密的例子小结

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

作者:不详 来源:网络 发布时间: 2014-08-09 21:23 点击:
话不多说,先放上代码,一共有两个文件:AES.php(aes算法类文件)和aesDemo.php(应用实例文件) aesDemo.php: 例子, 代码如下: ?php require_once('./AES.php'); //$aes = new AES(); $aes = new AES(true);// 把加密后的字符串按十六进制进行存储 //$aes = new AE

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

  话不多说,先放上代码,一共有两个文件:AES.php(aes算法类文件)和aesDemo.php(应用实例文件)

  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中AES加密解密的例子小结"由远航站长收集整理而来,仅供大家学习与参考使用。更多网站制作教程尽在远航站长站。
顶一下
(0)
0%
踩一下
(0)
0%
[点击 次] [返回上一页] [打印]
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
关于本站 - 联系我们 - 网站声明 - 友情连接- 网站地图 - 站点地图 - 返回顶部
Copyright © 2007-2013 www.yhzhan.com(远航站长). All Rights Reserved .
远航站长:为中小站长提供最佳的学习与交流平台,提供网页制作与网站编程等各类网站制作教程.
官方QQ:445490277 网站群:26680406 网站备案号:豫ICP备07500620号-4