标准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 之 没有mysql支持时的替代方案
Oct 09 PHP
计算一段日期内的周末天数的php代码(星期六,星期日总和)
Nov 12 PHP
PHP 命令行工具 shell_exec, exec, passthru, system详细使用介绍
Sep 11 PHP
php图片缩放实现方法
Feb 20 PHP
php 表单提交大量数据发生丢失的解决方法
Mar 03 PHP
简单介绍PHP的责任链编程模式
Aug 11 PHP
PHPStrom中实用的功能和快捷键大全
Sep 23 PHP
PHP获取二维数组中某一列的值集合
Dec 25 PHP
php实现xml转换数组的方法示例
Feb 03 PHP
使用XHProf查找PHP性能瓶颈的实例
Dec 13 PHP
Laravel使用模型实现like模糊查询的例子
Oct 24 PHP
Laravel 微信小程序后端搭建步骤详解
Nov 26 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
星际RPG字典
2020/03/04 星际争霸
2020年4月放送决定!第2期TV动画《邪神酱飞踢》视觉图&主题曲情报公开!
2020/03/06 日漫
上海无线电三厂简史修改版
2021/03/01 无线电
法兰绒滤网冲泡
2021/03/03 冲泡冲煮
win7+apache+php+mysql环境配置操作详解
2013/06/10 PHP
PHP函数import_request_variables()用法分析
2016/04/02 PHP
Ajax PHP JavaScript MySQL实现简易无刷新在线聊天室
2016/08/17 PHP
Windows服务器中PHP如何安装redis扩展
2019/09/27 PHP
JS判断当前日期是否大于某个日期的实现代码
2012/09/02 Javascript
JS格式化数字金额用逗号隔开保留两位小数
2013/10/18 Javascript
jQuery的事件委托实例分析
2015/07/15 Javascript
jquery 删除节点 添加节点 找兄弟节点的简单实现
2016/12/07 Javascript
微信小程序 使用腾讯地图SDK详解及实现步骤
2017/02/28 Javascript
Angular中使用$watch监听object属性值的变化(详解)
2017/04/24 Javascript
微信小程序 本地图片按照屏幕尺寸处理
2017/08/04 Javascript
(模仿京东用户注册)用JQuery实现简单表单验证,初学者必看
2018/01/08 jQuery
微信小程序icon组件使用详解
2018/01/31 Javascript
如何把vuejs打包出来的文件整合到springboot里
2018/07/26 Javascript
jquery获取input输入框中的值
2019/11/13 jQuery
python分析nignx访问日志脚本分享
2015/02/26 Python
Python中的os.path路径模块中的操作方法总结
2016/07/07 Python
Python字典,函数,全局变量代码解析
2017/12/18 Python
Python深度优先算法生成迷宫
2018/01/22 Python
python统计中文字符数量的两种方法
2019/01/31 Python
python3用urllib抓取贴吧邮箱和QQ实例
2020/03/10 Python
Python 列表推导式需要注意的地方
2020/10/23 Python
介绍一下SQL注入攻击的种类和防范手段
2012/02/18 面试题
应聘医药代表职位求职信
2013/10/21 职场文书
终端业务员岗位职责
2013/11/27 职场文书
女子职高个人自荐书
2014/02/01 职场文书
搞笑的获奖感言
2014/08/16 职场文书
2014年乡镇人大工作总结
2014/11/25 职场文书
三傻大闹宝莱坞观后感
2015/06/03 职场文书
2015中学政教处工作总结
2015/07/22 职场文书
创业计划书之花店
2019/09/20 职场文书
分享7个 Python 实战项目练习
2022/03/03 Python