标准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迅雷、快车、旋风下载专用链转换代码
Jun 15 PHP
基于php 随机数的深入理解
Jun 05 PHP
phpphp图片采集后按原路径保存图片示例
Feb 18 PHP
php实现的替换敏感字符串类实例
Sep 22 PHP
php简单实现多字节字符串翻转的方法
Mar 31 PHP
PHP的Yii框架的常用日志操作总结
Dec 08 PHP
简单谈谈php延迟静态绑定
Jan 26 PHP
php添加数据到xml文件的简单例子
Sep 08 PHP
php 获取文件行数的方法总结
Oct 11 PHP
golang 调用 php7详解及实例
Jan 04 PHP
cakephp常见知识点汇总
Feb 24 PHP
PHP读取Excel类文件
May 15 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版)
2012/08/21 PHP
PHP中基本HTTP认证技巧分析
2015/03/16 PHP
PHP实现GIF图片验证码
2015/11/04 PHP
Nigma vs Liquid BO3 第二场2.13
2021/03/10 DOTA
ASP中Sub和Function的区别说明
2020/08/30 Javascript
jquery与js函数冲突的两种解决方法
2013/09/09 Javascript
JavaScript转换二进制编码为ASCII码的方法
2015/04/16 Javascript
基于javascript实现漂亮的页面过渡动画效果附源码下载
2015/10/26 Javascript
JS读写CSS样式的方法汇总
2016/08/16 Javascript
Javascript动画效果(3)
2016/10/11 Javascript
用原生JS实现简单的多选框功能
2017/06/12 Javascript
JavaScript之Canvas_动力节点Java学院整理
2017/07/04 Javascript
vue.js 中使用(...)运算符报错的解决方法
2018/08/09 Javascript
JS加密插件CryptoJS实现AES加密操作示例
2018/08/16 Javascript
一个检测OpenSSL心脏出血漏洞的Python脚本分享
2014/04/10 Python
python中xrange和range的区别
2014/05/13 Python
python中getaddrinfo()基本用法实例分析
2015/06/28 Python
解决csv.writer写入文件有多余的空行问题
2018/07/06 Python
Pandas过滤dataframe中包含特定字符串的数据方法
2018/11/07 Python
Python并发:多线程与多进程的详解
2019/01/24 Python
python计算阶乘和的方法(1!+2!+3!+...+n!)
2019/02/01 Python
Python如何实现转换URL详解
2019/07/02 Python
python实现字典嵌套列表取值
2019/12/16 Python
python pandas移动窗口函数rolling的用法
2020/02/29 Python
python自动下载图片的方法示例
2020/03/25 Python
html5使用html2canvas实现浏览器截图的示例
2017/08/31 HTML / CSS
检测浏览器对HTML5和CSS3支持度的方法
2015/06/25 HTML / CSS
土木工程专业个人求职信
2013/12/05 职场文书
求职信范文英文版
2014/01/05 职场文书
生物科学专业职业规划书范文
2014/02/11 职场文书
人口与计划生育目标管理责任书
2014/07/29 职场文书
简易版租房协议书范本
2014/10/13 职场文书
就业意向协议书
2015/01/29 职场文书
火锅店的开业营销方案范本!
2019/07/05 职场文书
用Python爬取各大高校并可视化帮弟弟选大学,弟弟直呼牛X
2021/06/11 Python
厉害!这是Redis可视化工具最全的横向评测
2021/07/15 Redis