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中进行身份认证
Oct 09 PHP
织梦模板标记简介
Mar 11 PHP
Dedecms常用函数解析
Feb 01 PHP
理解php Hash函数,增强密码安全
Feb 25 PHP
php调用google接口生成二维码示例
Apr 28 PHP
PHP Reflection API详解
May 12 PHP
PHP ajax 异步执行不等待执行结果的处理方法
May 27 PHP
phplist及phpmailer(组合使用)通过gmail发送邮件的配置方法
Mar 30 PHP
PHP微信红包生成代码分享
Oct 06 PHP
ThinkPHP Where 条件中常用表达式示例(详解)
Mar 31 PHP
php读取XML的常见方法实例总结
Apr 25 PHP
基于Laravel-admin 后台的自定义页面用法详解
Sep 30 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水印
2007/03/16 PHP
调整PHP的性能
2013/10/30 PHP
变量在 PHP7 内部的实现(一)
2015/12/21 PHP
PHP递归的三种常用方式
2019/02/28 PHP
探讨JavaScript中声明全局变量三种方式的异同
2013/12/03 Javascript
单击某一段文字改写文本颜色
2014/06/06 Javascript
jQuery学习总结之jQuery事件
2014/06/30 Javascript
jQuery中:last-child选择器用法实例
2014/12/31 Javascript
javascript基于DOM实现省市级联下拉框的方法
2015/05/14 Javascript
JavaScript中的Promise使用详解
2015/06/24 Javascript
基于jQuery实现在线选座之高铁版
2015/08/24 Javascript
AngularJs 国际化(I18n/L10n)详解
2016/09/01 Javascript
用jQuery.ajaxSetup实现对请求和响应数据的过滤
2016/12/20 Javascript
jQuery实现的省市联动菜单功能示例【测试可用】
2017/01/13 Javascript
原生JS实现左右箭头选择日期实例代码
2017/03/14 Javascript
原生js实现淘宝放大镜效果
2020/10/28 Javascript
bootstrap+spring boot实现面包屑导航功能(前端代码)
2019/10/09 Javascript
Python脚本实现格式化css文件
2015/04/08 Python
Python2中的raw_input() 与 input()
2015/06/12 Python
Python实现遍历目录的方法【测试可用】
2017/03/22 Python
python numpy函数中的linspace创建等差数列详解
2017/10/13 Python
Python 识别12306图片验证码物品的实现示例
2020/01/20 Python
Django form表单与请求的生命周期步骤详解
2020/06/07 Python
python属于跨平台语言码
2020/06/09 Python
Parfume Klik丹麦:香水网上商店
2018/07/10 全球购物
IdealFit官方网站:女性蛋白质、补充剂和运动服装
2019/03/24 全球购物
写一个方法,输入一个文件名和一个字符串,统计这个字符串在这个文件中出现的次数
2016/04/13 面试题
英语专业毕业生自我鉴定
2013/11/09 职场文书
安全协议书
2014/04/23 职场文书
《称象》教学反思
2014/04/25 职场文书
阳光体育活动总结
2014/04/30 职场文书
医院搬迁方案
2014/06/14 职场文书
公安机关纪律作风整顿个人剖析材料材料
2014/10/10 职场文书
2015年毕业实习工作总结
2014/12/12 职场文书
mysql多表查询-笔记七
2021/04/05 MySQL
Centos7中MySQL数据库使用mysqldump进行每日自动备份的编写
2021/08/02 MySQL