PHP的AES加密算法完整实例


Posted in PHP onJuly 20, 2016

本文实例讲述了PHP的AES加密算法。分享给大家供大家参考,具体如下:

<?php
class MCrypt {
  private $hex_iv = '00000000000000000000000000000000'; # converted JAVA byte code in to HEX and placed it here
  private $key = 'U1MjU1M0FDOUZ.Qz'; #Same as in JAVA
  function __construct() {
    $this->key = hash('sha256', $this->key, true);
    //echo $this->key.'<br/>';
  }
  function encrypt($str) {
    $td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');
    mcrypt_generic_init($td, $this->key, $this->hexToStr($this->hex_iv));
    $block = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
    $pad = $block - (strlen($str) % $block);
    $str .= str_repeat(chr($pad), $pad);
    $encrypted = mcrypt_generic($td, $str);
    mcrypt_generic_deinit($td);
    mcrypt_module_close($td);
    return base64_encode($encrypted);
  }
  function decrypt($code) {
    $td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');
    mcrypt_generic_init($td, $this->key, $this->hexToStr($this->hex_iv));
    $str = mdecrypt_generic($td, base64_decode($code));
    $block = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
    mcrypt_generic_deinit($td);
    mcrypt_module_close($td);
    return $this->strippadding($str);
  }
  /*
   For PKCS7 padding
   */
  private function addpadding($string, $blocksize = 16) {
    $len = strlen($string);
    $pad = $blocksize - ($len % $blocksize);
    $string .= str_repeat(chr($pad), $pad);
    return $string;
  }
  private function strippadding($string) {
    $slast = ord(substr($string, -1));
    $slastc = chr($slast);
    $pcheck = substr($string, -$slast);
    if (preg_match("/$slastc{" . $slast . "}/", $string)) {
      $string = substr($string, 0, strlen($string) - $slast);
      return $string;
    } else {
      return false;
    }
  }
  function hexToStr($hex)
  {
    $string='';
    for ($i=0; $i < strlen($hex)-1; $i+=2)
    {
      $string .= chr(hexdec($hex[$i].$hex[$i+1]));
    }
    return $string;
  }
}
$encryption = new MCrypt();
echo $encryption->encrypt('123456') . "<br/>";
echo $encryption->decrypt('tpyxISJ83dqEs3uw8bN/+w==');
?>

PHP 相关文章推荐
基于PHP magic_quotes_gpc的使用方法详解
Jun 24 PHP
浅析php中抽象类和接口的概念以及区别
Jun 27 PHP
Linux下创建nginx脚本-start、stop、reload…
Aug 03 PHP
thinkphp中空模板与空模块的用法实例
Nov 26 PHP
php中删除数组的第一个元素和最后一个元素的函数
Mar 07 PHP
PHP Reflection API详解
May 12 PHP
修复ShopNC使用QQ 互联时提示100010 错误
Nov 08 PHP
PHP插件PHPMailer发送邮件功能
Feb 28 PHP
laravel 使用auth编写登录的方法
Sep 30 PHP
laravel 获取当前url的别名方法
Oct 11 PHP
PHP中的输出echo、print、printf、sprintf、print_r和var_dump的示例代码
Dec 01 PHP
PHP如何防止用户重复提交表单
Dec 09 PHP
postfixadmin忘记密码后的修改密码方法详解
Jul 20 #PHP
PHP简单日历实现方法
Jul 20 #PHP
分析PHP中单双引号的误区和双引号小隐患
Jul 19 #PHP
PHP实现数组array转换成xml的方法
Jul 19 #PHP
smarty循环嵌套用法示例分析
Jul 19 #PHP
PHP中Socket连接及读写数据超时问题分析
Jul 19 #PHP
在PHP语言中使用JSON和将json还原成数组的方法
Jul 19 #PHP
You might like
一个程序下载的管理程序(四)
2006/10/09 PHP
PHP COOKIE设置为浏览器进程
2009/06/21 PHP
php class中public,private,protected的区别以及实例分析
2013/06/18 PHP
使用php判断服务器是否支持Gzip压缩功能
2013/09/24 PHP
CodeIgniter基于Email类发邮件的方法
2016/03/29 PHP
php常用日期时间函数实例小结
2019/07/04 PHP
为你的网站增加亮点的9款jQuery插件推荐
2011/05/03 Javascript
jquery实现显示已选用户
2014/07/21 Javascript
JavaScript实现关键字高亮功能
2014/11/12 Javascript
jQuery子属性过滤选择器用法分析
2015/02/10 Javascript
jquery实现简单的无缝滚动
2015/04/15 Javascript
jQuery plugin animsition使用小结
2017/09/14 jQuery
JS设计模式之状态模式概念与用法分析
2018/02/05 Javascript
详解vue2.0 不同屏幕适配及px与rem转换问题
2018/02/23 Javascript
vue element-ui table表格滚动加载方法
2018/03/02 Javascript
angular2路由之routerLinkActive指令【推荐】
2018/05/30 Javascript
微信小程序仿美团城市选择
2018/06/06 Javascript
js指定日期增加指定月份的实现方法
2018/12/19 Javascript
kNN算法python实现和简单数字识别的方法
2014/11/18 Python
python在线编译器的简单原理及简单实现代码
2018/02/02 Python
Python实现的字典排序操作示例【按键名key与键值value排序】
2018/12/21 Python
24式加速你的Python(小结)
2019/06/13 Python
jupyter notebook 增加kernel教程
2020/04/10 Python
Python制作简单的剪刀石头布游戏
2020/12/10 Python
利用三角函数在canvas上画虚线的方法
2018/01/11 HTML / CSS
美国网上鞋子零售商:Dr. Scholl’s Shoes
2017/11/17 全球购物
经典团队口号大全
2014/06/21 职场文书
2014年社区居委会主任重阳节讲话稿
2014/09/25 职场文书
2014三年级班主任工作总结
2014/12/05 职场文书
雨中的树观后感
2015/06/03 职场文书
安全教育第一课观后感
2015/06/17 职场文书
《海上日出》教学反思
2016/02/23 职场文书
2019开业庆典剪彩仪式主持词!
2019/07/22 职场文书
来探秘“德国中小企业”的成功之道
2019/07/26 职场文书
使用@Value值注入及配置文件组件扫描
2021/07/09 Java/Android
【海涛解说】暗牧也疯狂,牛蛙成配角
2022/04/01 DOTA