标准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 相关文章推荐
用Zend Encode编写开发PHP程序
Oct 09 PHP
php 过滤危险html代码
Jun 29 PHP
PHP应用JSON技巧讲解
Feb 03 PHP
php生成EAN_13标准条形码实例
Nov 13 PHP
php实现下载限制速度示例分享
Feb 13 PHP
PHP连接access数据库
Mar 27 PHP
php实现背景图上添加圆形logo图标的方法
Nov 17 PHP
php mysql_list_dbs()函数用法示例
Mar 29 PHP
PHP实现限制IP访问及提交次数的方法详解
Jul 17 PHP
php二维数组按某个键值排序的实例讲解
Feb 15 PHP
PHP随机数函数rand()与mt_rand()的讲解
Mar 25 PHP
tp5框架的增删改查操作示例
Oct 31 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中ini_set与ini_get用法实例
2014/11/04 PHP
php使用cookie显示用户上次访问网站日期的方法
2015/01/26 PHP
caller和callee的区别介绍及演示结果
2013/03/10 Javascript
JS自动适应的图片弹窗实例
2013/06/29 Javascript
如何判断元素是否为HTMLElement元素
2013/12/06 Javascript
jquery live()重复绑定的解决方法介绍
2014/01/03 Javascript
JS和函数式语言的三特性
2014/03/05 Javascript
jQuery简单图表peity.js使用示例
2014/05/02 Javascript
nodejs npm install全局安装和本地安装的区别
2014/06/05 NodeJs
深入浅出 jQuery中的事件机制
2016/08/23 Javascript
轻松搞定js表单验证
2016/10/13 Javascript
利用JavaScript如何查询某个值是否数组内
2017/07/30 Javascript
Node.js五大应用性能技巧小结(必须收藏)
2017/08/09 Javascript
JS处理数据四舍五入(tofixed与round的区别详解)
2017/10/26 Javascript
对Vue2 自定义全局指令Vue.directive和指令的生命周期介绍
2018/08/30 Javascript
js正则匹配多个全部数据问题
2019/12/20 Javascript
javascript浅层克隆、深度克隆对比及实例解析
2020/02/09 Javascript
vue中实现图片压缩 file文件的方法
2020/05/28 Javascript
[26:24]完美副总裁、DOTA2负责人蔡玮专访:电竞如人生
2014/09/11 DOTA
[53:13]DOTA2-DPC中国联赛 正赛 DLG vs PHOENIX BO3 第三场 1月18日
2021/03/11 DOTA
列举Python中吸引人的一些特性
2015/04/09 Python
Python与shell的3种交互方式介绍
2015/04/11 Python
python 实现selenium断言和验证的方法
2019/02/13 Python
Python中字符串与编码示例代码
2019/05/20 Python
python自制包并用pip免提交到pypi仅安装到本机【推荐】
2019/06/03 Python
python如何爬取网站数据并进行数据可视化
2019/07/08 Python
Python批量启动多线程代码实例
2020/02/18 Python
pytorch中的inference使用实例
2020/02/20 Python
Python编程快速上手——选择性拷贝操作案例分析
2020/02/28 Python
利用Python如何实时检测自身内存占用
2020/05/09 Python
教学大赛获奖感言
2014/01/15 职场文书
新春文艺演出主持词
2014/03/27 职场文书
植树造林的宣传标语
2014/06/23 职场文书
竞选纪律委员演讲稿
2014/09/13 职场文书
2014年少先队工作总结
2014/12/03 职场文书
2014年教研员工作总结
2014/12/23 职场文书