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 各种排序算法实现代码
Aug 20 PHP
PHP开发中常用的三个表单验证函数使用小结
Mar 03 PHP
php set_magic_quotes_runtime() 函数过时解决方法
Jul 08 PHP
vs中通过剪切板循环来循环粘贴不同内容
Apr 30 PHP
php中unlink()、mkdir()、rmdir()等方法的使用介绍
Dec 21 PHP
PHP临时文件的安全性分析
Jul 04 PHP
PHP中$_SERVER使用说明
Jul 05 PHP
apache和PHP如何整合在一起
Oct 12 PHP
Zend Framework入门教程之Zend_Db数据库操作详解
Dec 08 PHP
php封装json通信接口详解及实例
Mar 07 PHP
PHP开发之归档格式phar文件概念与用法详解【创建,使用,解包还原提取】
Nov 17 PHP
bindParam和bindValue的区别以及在Yii2中的使用详解
Mar 12 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函数指定默认值方法的小例子
2013/12/04 PHP
php实现通过cookie换肤的方法
2015/07/13 PHP
PHP树形结构tree类用法示例
2019/02/01 PHP
php swoole多进程/多线程用法示例【基于php7nts版】
2019/08/12 PHP
jQuery ajax BUG:object doesn't support this property or method
2010/07/06 Javascript
JS函数实现动态添加CSS样式表文件
2012/12/15 Javascript
javascript中call apply 的应用场景
2015/04/16 Javascript
在其他地方你学不到的jQuery小贴士和技巧(欢迎收藏)
2016/01/20 Javascript
Node.js 实现简单小说爬虫实例
2016/11/18 Javascript
使用JS动态显示文本
2017/09/09 Javascript
一次记住JavaScript的6个正则表达式方法
2018/02/22 Javascript
详解使用vue-cli脚手架初始化Vue项目下的项目结构
2018/03/08 Javascript
关于jquery中attr()和prop()方法的区别
2018/05/28 jQuery
security.js实现的RSA加密功能示例
2018/06/06 Javascript
Vue Components 数字键盘的实现
2019/09/18 Javascript
layui form.render('select', 'test2') 更新渲染的方法
2019/09/27 Javascript
Vue3 中的数据侦测的实现
2019/10/09 Javascript
python编码总结(编码类型、格式、转码)
2016/07/01 Python
Django原生sql也能使用Paginator分页的示例代码
2017/11/15 Python
Python3连接SQLServer、Oracle、MySql的方法
2018/06/28 Python
关于python列表增加元素的三种操作方法
2018/08/22 Python
selenium+python设置爬虫代理IP的方法
2018/11/29 Python
pandas每次多Sheet写入文件的方法
2018/12/10 Python
python 随机打乱 图片和对应的标签方法
2018/12/14 Python
详解Python字符串切片
2019/05/20 Python
python图形绘制奥运五环实例讲解
2019/09/14 Python
Jupyter 无法下载文件夹如何实现曲线救国
2020/04/22 Python
python脚本监控logstash进程并邮件告警实例
2020/04/28 Python
浅谈TensorFlow之稀疏张量表示
2020/06/30 Python
Python使用Selenium模拟浏览器自动操作功能
2020/09/08 Python
德国苹果商店:MacTrade
2020/05/18 全球购物
TCP协议通讯的过程和步骤是什么
2015/10/18 面试题
智能电子应届生求职信
2013/11/10 职场文书
书香校园活动方案
2014/02/28 职场文书
2014第二批党的群众路线教育实践活动对照检查材料思想汇报
2014/09/18 职场文书
2016年国陪研修感言
2015/11/18 职场文书