标准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+oracle 分页类
Oct 09 PHP
PHP通过iconv将字符串从GBK转换为UTF8字符集
Jul 18 PHP
抓取并下载CSS中所有图片文件的php代码
Sep 26 PHP
如何使用PHP实现javascript的escape和unescape函数
Jun 29 PHP
PHP临时文件的安全性分析
Jul 04 PHP
phpword插件导出word文件时中文乱码问题处理方案
Aug 19 PHP
PHP中开启gzip压缩的2种方法
Jan 31 PHP
php制作简单模版引擎
Apr 07 PHP
PHP基于正则批量替换Img中src内容实现获取缩略图的功能示例
Jun 07 PHP
Laravel框架中Blade模板的用法示例
Aug 30 PHP
php 数据结构之链表队列
Oct 17 PHP
PHP的图像处理实例小结【文字水印、图片水印、压缩图像等】
Dec 20 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
一个用php实现的获取URL信息的类
2007/01/02 PHP
destoon实现首页显示供应、企业、资讯条数的方法
2014/07/15 PHP
php插入排序法实现数组排序实例
2015/02/16 PHP
php实现微信小程序授权登录功能(实现流程)
2019/11/13 PHP
Alliance vs Liquid BO3 第二场2.13
2021/03/10 DOTA
JS 建立对象的方法
2007/04/21 Javascript
JS 动态获取节点代码innerHTML分析 [IE,FF]
2009/11/30 Javascript
JavaScript获取伪元素(Pseudo-Element)属性的方法技巧
2015/03/13 Javascript
JavaScript中操作Mysql数据库实例
2015/04/02 Javascript
JS弹出层遮罩,隐藏背景页面滚动条细节优化分析
2016/04/29 Javascript
聊一聊JavaScript作用域和作用域链
2016/05/03 Javascript
如何理解Vue的.sync修饰符的使用
2017/08/17 Javascript
Angular2使用vscode断点调试ts文件的方法
2017/12/13 Javascript
详解VUE Element-UI多级菜单动态渲染的组件
2019/04/25 Javascript
JavaScript的Proxy可以做哪些有意思的事儿
2019/06/15 Javascript
Bootstrap简单实用的表单验证插件BootstrapValidator用法实例详解
2020/03/29 Javascript
[02:00]最后,我终于出了辉耀
2018/03/27 DOTA
推荐下python/ironpython:从入门到精通
2007/10/02 Python
linux 下实现python多版本安装实践
2014/11/18 Python
Python爬虫获取整个站点中的所有外部链接代码示例
2017/12/26 Python
Python实现的将文件每一列写入列表功能示例【测试可用】
2018/03/19 Python
Python Unittest根据不同测试环境跳过用例的方法
2018/12/16 Python
python 实现GUI(图形用户界面)编程详解
2019/07/17 Python
Python3将数据保存为txt文件的方法
2019/09/12 Python
Python3实现监控新型冠状病毒肺炎疫情的示例代码
2020/02/13 Python
让IE6、IE7、IE8支持CSS3的脚本
2010/07/20 HTML / CSS
GLAMGLOW格莱魅美国官网:美国知名的面膜品牌
2016/12/31 全球购物
英国的领先快速时尚零售商:In The Style
2019/03/25 全球购物
美国购买韩国护肤和美容产品网站:Althea Korea
2020/11/16 全球购物
《美丽的田园》教学反思
2014/03/01 职场文书
海飞丝广告词
2014/03/20 职场文书
乔丹名人堂演讲稿
2014/05/24 职场文书
新疆民族团结演讲稿
2014/08/27 职场文书
党员民主评议总结
2014/10/20 职场文书
护士工作心得体会
2016/01/25 职场文书
Python进行区间取值案例讲解
2021/08/02 Python