标准PHP的AES加密算法类


Posted in PHP onMarch 12, 2015

分享一个标准PHP的AES加密算法类,其中mcrypt_get_block_size('rijndael-128', 'ecb');,如果在不明白原理的情况下比较容易搞错,可以通过mcrypt_list_algorithms函数查看你需要的加密算法标识。

<?php

/**

 * AES128加解密类

 * @author dy

 *

 */

defined('InEjbuy') or exit('Access Invalid!');

class Aes{

    //密钥

    private $_secrect_key;

    public function __construct(){

        $this->_secrect_key = 'MYgGnQE2jDFADSFFDSEWsdD';

    }

    /**

     * 加密方法

     * @param string $str

     * @return string

     */

    public function encrypt($str){

        //AES, 128 ECB模式加密数据

        $screct_key = $this->_secrect_key;

        $screct_key = base64_decode($screct_key);

        $str = trim($str);

        $str = $this->addPKCS7Padding($str);

        $iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128,MCRYPT_MODE_ECB),MCRYPT_RAND);

        $encrypt_str =  mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $screct_key, $str, MCRYPT_MODE_ECB, $iv);

        return base64_encode($encrypt_str);

    }

    /**

     * 解密方法

     * @param string $str

     * @return string

     */

    public function decrypt($str){

        //AES, 128 ECB模式加密数据

        $screct_key = $this->_secrect_key;

        $str = base64_decode($str);

        $screct_key = base64_decode($screct_key);

        $iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128,MCRYPT_MODE_ECB),MCRYPT_RAND);

        $encrypt_str =  mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $screct_key, $str, MCRYPT_MODE_ECB, $iv);

        $encrypt_str = trim($encrypt_str);

        $encrypt_str = $this->stripPKSC7Padding($encrypt_str);

        return $encrypt_str;

    }

    /**

     * 填充算法

     * @param string $source

     * @return string

     */

    function addPKCS7Padding($source){

        $source = trim($source);

        $block = mcrypt_get_block_size('rijndael-128', 'ecb');

        $pad = $block - (strlen($source) % $block);

        if ($pad <= $block) {

            $char = chr($pad);

            $source .= str_repeat($char, $pad);

        }

        return $source;

    }

    /**

     * 移去填充算法

     * @param string $source

     * @return string

     */

    function stripPKSC7Padding($source){

        $source = trim($source);

        $char = substr($source, -1);

        $num = ord($char);

        if($num==62)return $source;

        $source = substr($source,0,-$num);

        return $source;

    }

}

以上就是本文所述的全部内容了,希望对大家学习php的AES加密算法类有所帮助。

PHP 相关文章推荐
PHP中查询SQL Server或Sybase时TEXT字段被截断的解决方法
Mar 10 PHP
php Xdebug 调试扩展的安装与使用.
Mar 13 PHP
zend api扩展的php对象的autoload工具
Apr 18 PHP
解析yii数据库的增删查改
Jun 20 PHP
PHP调用.NET的WebService 简单实例
Mar 27 PHP
PHP实现linux命令tail -f
Feb 22 PHP
Yii实现简单分页的方法
Apr 29 PHP
Thinkphp自定义代码生成工具及用法说明(附下载地址)
May 27 PHP
php禁用cookie后session设置方法分析
Oct 19 PHP
PHP实现的常规正则验证helper公共类完整实例
Apr 27 PHP
laravel获取不到session的三种解决办法【推荐】
Sep 16 PHP
PHP 实现链式操作
Mar 09 PHP
php接口数据加密、解密、验证签名
Mar 12 #PHP
php查询相似度最高的字符串的方法
Mar 12 #PHP
PHP实现通用alert函数的方法
Mar 11 #PHP
PHP获取ip对应地区和使用网络类型的方法
Mar 11 #PHP
javascript+php实现根据用户时区显示当地时间的方法
Mar 11 #PHP
PHP读取txt文本文件并分页显示的方法
Mar 11 #PHP
php中有关合并某一字段键值相同的数组合并的改进
Mar 10 #PHP
You might like
PHP5中的时间相差8小时的解决办法
2008/03/28 PHP
php从给定url获取文件扩展名的方法
2015/03/14 PHP
对laravel的csrf 防御机制详解,及form中csrf_token()的存在介绍
2019/10/24 PHP
js自带函数备忘 数组
2006/12/29 Javascript
jquery学习笔记二 实现可编辑的表格
2010/04/09 Javascript
jquery判断checkbox(复选框)是否被选中的代码
2010/10/20 Javascript
javascript闭包的高级使用方法实例
2013/07/04 Javascript
JS中的this变量的使用介绍
2013/10/21 Javascript
JavaScript中的style.cssText使用教程
2014/11/06 Javascript
js鼠标单击和双击事件冲突问题的快速解决方法
2016/07/11 Javascript
利用浮层使select不可选的实现方法
2016/12/03 Javascript
JS中parseInt()和map()用法分析
2016/12/16 Javascript
JS原型继承四步曲及原型继承图一览
2017/11/28 Javascript
vue+element-ui+ajax实现一个表格的实例
2018/03/09 Javascript
封装微信小程序http拦截器过程解析
2019/08/13 Javascript
Vue设置长时间未操作登录自动到期返回登录页
2020/01/22 Javascript
如何在 ant 的table中实现图片的渲染操作
2020/10/28 Javascript
Vue使用CDN引用项目组件,减少项目体积的步骤
2020/10/30 Javascript
[01:09]2014DOTA2国际邀请赛 TI4西雅图DOTA2 中国美女coser加油助威
2014/07/20 DOTA
[01:09:40]Newbee vs Pain 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python内存管理分析
2015/04/08 Python
asyncio 的 coroutine对象 与 Future对象使用指南
2016/09/11 Python
Python使用re模块正则提取字符串中括号内的内容示例
2018/06/01 Python
PyQt5+requests实现车票查询工具
2019/01/21 Python
Python字典的概念及常见应用实例详解
2019/10/30 Python
京剧自荐信
2014/01/26 职场文书
2014年两会学习心得体会
2014/03/17 职场文书
我爱读书演讲稿
2014/05/07 职场文书
环保倡议书500字
2014/05/15 职场文书
林肯就职演讲稿
2014/05/19 职场文书
公司应聘求职信
2014/06/21 职场文书
Python 实现绘制子图及子图刻度的变换等问题
2021/05/31 Python
Win11安装受阻怎么办? Windows11安装问题与解决方案汇总
2021/11/21 数码科技
2022新作动画《福星小子》释出宣传影片 加入内田真礼&宫野真守配音演出
2022/04/08 日漫
Python中request的基本使用解决乱码问题
2022/04/12 Python
戴尔Win11系统no bootable devices found解决教程
2022/09/23 数码科技