标准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之第七天
Oct 09 PHP
多重?l件?合查?(一)
Oct 09 PHP
基于Windows下Apache PHP5.3.1安装教程
Jan 08 PHP
php中获得视频时间总长度的另一种方法
Sep 15 PHP
用PHP+MySQL搭建聊天室功能实例代码
Aug 20 PHP
PHP设计模式之迭代器模式的深入解析
Jun 13 PHP
php不允许用户提交空表单(php空值判断)
Nov 12 PHP
php绘图中显示不出图片的原因及解决
Mar 05 PHP
ThinkPHP基本的增删查改操作实例教程
Aug 22 PHP
php异步多线程swoole用法实例
Nov 14 PHP
php ci 获取表单中多个同名input元素值的代码
Mar 25 PHP
PHP Swoole异步Redis客户端实现方法示例
Oct 24 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代码实现表单数据验证类
2015/07/28 PHP
php用户登录之cookie信息安全分析
2016/05/13 PHP
php实现的一段简单概率相关代码
2016/05/30 PHP
使用jquery实现select添加实现后台权限添加的效果
2011/05/28 Javascript
IE和Firefox的Javascript兼容性总结[推荐收藏]
2011/10/19 Javascript
js中opener与parent的区别详细解析
2014/01/14 Javascript
JavaScript动态改变div属性的实现方法
2015/07/22 Javascript
javascript获取系统当前时间的方法
2015/11/19 Javascript
使用vue编写一个点击数字计时小游戏
2016/08/31 Javascript
Javascript单例模式的介绍和实例
2016/10/08 Javascript
省市区三级联动jquery实现代码
2020/04/15 Javascript
KnockoutJS 3.X API 第四章之表单textInput、hasFocus、checked绑定
2016/10/11 Javascript
JS中传递参数的几种不同方法比较
2017/01/20 Javascript
JavaScript常用正则验证函数实例小结【年龄,数字,Email,手机,URL,日期等】
2017/01/23 Javascript
Vue.js实现简单动态数据处理
2017/02/13 Javascript
Js自动截取字符串长度,添加省略号(……)的实现方法
2017/03/06 Javascript
微信小程序中做用户登录与登录态维护的实现详解
2017/05/17 Javascript
Vue插值、表达式、分隔符、指令知识小结
2018/10/12 Javascript
Flutter部件内部状态管理小结之实现Vue的v-model功能
2019/06/11 Javascript
JS实现简易留言板(节点操作)
2020/03/16 Javascript
通过vue刷新左侧菜单栏操作
2020/08/06 Javascript
[02:42]完美大师赛主赛事淘汰赛第三日观众采访
2017/11/25 DOTA
用实例说明python的*args和**kwargs用法
2013/11/01 Python
用PyInstaller把Python代码打包成单个独立的exe可执行文件
2018/05/26 Python
Python远程开发环境部署与调试过程图解
2019/12/09 Python
Python基本类型的连接组合和互相转换方式(13种)
2019/12/16 Python
Python实现查找数据库最接近的数据
2020/06/08 Python
python中count函数知识点浅析
2020/12/17 Python
华为消费者德国官方网站:HUAWEI德国
2020/11/03 全球购物
new修饰符是起什么作用
2015/06/28 面试题
应聘美工求职信
2013/11/07 职场文书
巾帼文明岗汇报材料
2014/12/24 职场文书
教师师德工作总结2015
2015/07/22 职场文书
关于办理居住证的介绍信模板
2019/11/27 职场文书
解决Navicat for Mysql连接报错1251的问题(连接失败)
2021/05/27 MySQL
MySQL分区表管理命令汇总
2022/03/21 MySQL