标准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 增加了对 .ZIP 文件的读取功能
Oct 09 PHP
PHP filter_var() 函数 Filter 函数
Apr 25 PHP
PHP常用特殊运算符号和函数总结(php新手入门必看)
Feb 02 PHP
实现PHP多线程异步请求的3种方法
Jan 17 PHP
php读取文件内容的方法汇总
Jan 24 PHP
PHP封装的HttpClient类用法实例
Jun 17 PHP
Laravel 5.3 学习笔记之 错误&amp;日志
Aug 28 PHP
php用户密码加密算法分析【Discuz加密算法】
Oct 12 PHP
使用php完成常见的文件上传功能(推荐)
Jan 13 PHP
PHP简单实现合并2个数字键数组值的方法
May 30 PHP
thinkPHP5.0框架验证码调用及点击图片刷新简单实现方法
Sep 07 PHP
PHP实现单文件、多个单文件、多文件上传函数的封装示例
Sep 02 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
解析mysql left( right ) join使用on与where筛选的差异
2013/06/18 PHP
PHP和Shell实现检查SAMBA与NFS Server是否存在
2015/01/07 PHP
YII Framework教程之异常处理详解
2016/03/14 PHP
php学习笔记之字符串常见操作总结
2019/07/16 PHP
FireFox与IE 下js兼容触发click事件的代码
2008/11/20 Javascript
prototype与jquery下Ajax实现的差别
2009/09/13 Javascript
JavaScript游戏之是男人就下100层代码打包
2010/11/08 Javascript
JavaScript中instanceof与typeof运算符的用法及区别详细解析
2013/11/19 Javascript
jQuery打印图片pdf、txt示例代码
2014/07/22 Javascript
javascript实现简单的二级联动
2015/03/19 Javascript
JQ实现新浪游戏首页幻灯片
2015/07/29 Javascript
js实现表单及时验证功能 用户信息立即验证
2016/09/13 Javascript
JQuery.validationEngine表单验证插件(推荐)
2016/12/10 Javascript
Node.js用readline模块实现输入输出
2016/12/16 Javascript
Angular4的输入属性与输出属性实例详解
2017/11/29 Javascript
jQuery中$原理实例分析
2018/08/13 jQuery
javascript实现手动点赞效果
2019/04/09 Javascript
微信小程序 云开发模糊查询实现解析
2019/09/02 Javascript
javascript设计模式 ? 访问者模式原理与用法实例分析
2020/04/26 Javascript
python使用PyFetion来发送短信的例子
2014/04/22 Python
用Python生成器实现微线程编程的教程
2015/04/13 Python
Python import用法以及与from...import的区别
2015/05/28 Python
Python实现的简单计算器功能详解
2018/08/25 Python
解决python3读取Python2存储的pickle文件问题
2018/10/25 Python
python实现将多个文件分配到多个文件夹的方法
2019/01/07 Python
python开头的coding设置方法
2019/08/08 Python
Python中类似于jquery的pyquery库用法分析
2019/12/02 Python
python tkinter的消息框模块(messagebox,simpledialog)
2020/11/07 Python
HTML5中微数据概述及在搜索引擎中的使用举例
2013/02/07 HTML / CSS
HTML5 Canvas的常用线条属性值总结
2016/03/17 HTML / CSS
一月红领巾广播稿
2014/02/11 职场文书
学校安全防火方案
2014/06/07 职场文书
经贸日语专业自荐信
2014/09/02 职场文书
学生顶撞老师的检讨书
2014/09/17 职场文书
同步小康驻村工作简报
2015/07/20 职场文书
2020年个人安全保证书参考模板
2020/01/08 职场文书