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 相关文章推荐
常用表单验证类,有了这个,一般的验证就都齐了。
Dec 06 PHP
PHP下escape解码函数的实现方法
Aug 08 PHP
php 按指定元素值去除数组元素的实现方法
Nov 04 PHP
PHP操作文件类的函数代码(文件和文件夹创建,复制,移动和删除)
Nov 10 PHP
360通用php防护代码(使用操作详解)
Jun 18 PHP
PHP缓存机制Output Control详解
Jul 14 PHP
php验证码实现代码(3种)
Sep 07 PHP
php中get_magic_quotes_gpc()函数说明
Feb 06 PHP
PHP里面把16进制的图片数据显示在html的img标签上(实现方法)
May 02 PHP
PHP多维数组指定多字段排序的示例代码
May 16 PHP
TP3.2.3框架使用CKeditor编辑器在页面中上传图片的方法分析
Dec 31 PHP
实例讲解PHP表单
Jun 10 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转成EXE文件
2006/10/09 PHP
PHP遍历XML文档所有节点的方法
2015/03/12 PHP
php使用socket post数据到其它web服务器的方法
2015/06/02 PHP
PHP常用算法和数据结构示例(必看篇)
2017/03/15 PHP
仿校内登陆框,精美,给那些很厉害但是没有设计天才的程序员
2008/11/24 Javascript
jquery ui bootstrap 实现自定义风格
2014/11/14 Javascript
JavaScript仿支付宝密码输入框
2015/12/29 Javascript
JavaScript设计模式经典之工厂模式
2016/02/24 Javascript
总结javascript中的六种迭代器
2016/08/16 Javascript
BootStrap中按钮点击后被禁用按钮的最佳实现方法
2016/09/23 Javascript
完美实现js选项卡切换效果(二)
2017/03/08 Javascript
关于微信小程序获取小程序码并接受buffer流保存为图片的方法
2019/06/07 Javascript
原生js实现俄罗斯方块
2020/10/20 Javascript
Python序列操作之进阶篇
2016/12/08 Python
python使用wxpy实现微信消息防撤回脚本
2019/04/29 Python
使用Python操作MySQL的小技巧
2020/09/10 Python
史上最详细的Python打包成exe文件教程
2021/01/17 Python
html5 figure和figcaption的使用方法
2018/09/10 HTML / CSS
中国跨境电商:Tomtop
2017/03/16 全球购物
Asics日本官网:鬼冢八喜郎创立的跑鞋运动品牌
2017/10/18 全球购物
Bally美国官网:经典瑞士鞋履、手袋及配饰奢侈品牌
2018/05/18 全球购物
JD Sports丹麦:英国领先的运动时尚零售商
2020/11/24 全球购物
电气自动化大学生求职信
2013/10/16 职场文书
汽车运用工程毕业生自荐信
2013/10/29 职场文书
大学生简单自荐信
2013/11/10 职场文书
精彩广告词大全
2014/03/19 职场文书
快餐公司创业计划书
2014/04/29 职场文书
优秀学生党员先进事迹材料
2014/05/29 职场文书
应届生面试求职信
2014/07/02 职场文书
施工安全责任书范本
2014/07/24 职场文书
竞聘自述材料
2014/08/25 职场文书
同意报考公务员证明
2015/06/17 职场文书
小学同学聚会感言
2015/07/30 职场文书
Python 正则模块详情
2021/11/02 Python
python pygame 开发五子棋双人对弈
2022/05/02 Python
Redis keys命令的具体使用
2022/06/05 Redis