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和MySQL保存和输出图片
Oct 09 PHP
基于mysql的论坛(5)
Oct 09 PHP
PHP中HTTP方式下的Gzip压缩传输方法举偶
Feb 15 PHP
php set_time_limit(0) 设置程序执行时间的函数
May 26 PHP
php header Content-Type类型小结
Jul 03 PHP
解析zend Framework如何自动加载类
Jun 28 PHP
preg_match_all使用心得分享
Jan 31 PHP
php页面,mysql数据库转utf-8乱码,utf-8编码问题总结
Aug 27 PHP
PHP加密解密函数详解
Oct 28 PHP
php连接MSsql server的五种方法总结
Mar 04 PHP
Yii2框架配置文件(Application属性)与调试技巧实例分析
May 27 PHP
Yii框架连表查询操作示例
Sep 06 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
如何使用PHP往windows中添加用户
2006/12/06 PHP
.htaccess文件保护实例讲解
2011/02/06 PHP
php使用GeoIP库实例
2014/06/27 PHP
PHP中in_array的隐式转换的解决方法
2018/03/06 PHP
javascript 密码强弱度检测万能插件
2009/02/25 Javascript
JQuery制作的放大效果的popup对话框(未添加任何jquery plugin)分享
2013/04/28 Javascript
JS对HTML标签select的获取、添加、删除操作
2013/10/17 Javascript
jQuery 2.0.3 源码分析之core(一)整体架构
2014/05/27 Javascript
JavaScript动态设置div的样式的方法
2015/12/26 Javascript
JavaScript函数中关于valueOf和toString的理解
2016/06/14 Javascript
基于JavaScript实现跳转提示页面
2016/09/24 Javascript
js数字计算 误差问题的快速解决方法
2017/02/28 Javascript
jQuery插件zTree实现删除树节点的方法示例
2017/03/08 Javascript
vue生成token保存在客户端localStorage中的方法
2017/10/25 Javascript
微信小程序实现导航栏选项卡效果
2020/06/19 Javascript
layerUI下的绑定事件实例代码
2018/08/17 Javascript
jQuery中常用动画效果函数知识点整理
2018/08/19 jQuery
绘制微信小程序验证码功能的实例代码
2021/01/05 Javascript
[02:11]2016国际邀请赛中国区预选赛全程回顾
2016/07/01 DOTA
[01:34]完美“圣”典宣传片震撼发布,12.17与你不见不散
2016/12/16 DOTA
Python import自定义模块方法
2015/02/12 Python
python批量生成本地ip地址的方法
2015/03/23 Python
详解在Python中处理异常的教程
2015/05/24 Python
Python面向对象之类的内置attr属性示例
2018/12/14 Python
Python中请不要再用re.compile了
2019/06/30 Python
python中的测试框架
2020/11/13 Python
90后毕业生的求职信范文
2013/09/21 职场文书
党员公开承诺书和承诺事项
2014/03/25 职场文书
项目经理任命书范本
2014/06/05 职场文书
2014高考励志标语
2014/06/05 职场文书
开展创先争优活动总结
2014/08/28 职场文书
银行给客户的感谢信
2015/01/23 职场文书
2016年秋季运动会通讯稿
2015/11/25 职场文书
创业计划书之水果店
2019/07/18 职场文书
Python语言规范之Pylint的详细用法
2021/06/24 Python
一篇文章弄懂Python关键字、标识符和变量
2021/07/15 Python