标准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 相关文章推荐
让你的网站首页自动选择语言转跳
Dec 06 PHP
php获取某个目录大小的代码
Sep 10 PHP
让你成为更出色的PHP开发者的10个技巧
Feb 25 PHP
ThinkPHP在新浪SAE平台的部署实例
Oct 31 PHP
PHP程序员必须清楚的问题汇总
Dec 18 PHP
Yii框架调试心得--在页面输出执行sql语句
Dec 25 PHP
php+mysql大量用户登录解决方案分析
Dec 29 PHP
php常用数组array函数实例总结【赋值,拆分,合并,计算,添加,删除,查询,判断,排序】
Dec 07 PHP
PHP用户注册邮件激活账户的实现代码
May 31 PHP
基于php中echo用逗号和用点号的区别详解
Jan 23 PHP
RSA实现JS前端加密与PHP后端解密功能示例
Aug 05 PHP
one.php 多项目、函数库、类库 统一为一个版本的方法
Aug 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
在PHP3中实现SESSION的功能(三)
2006/10/09 PHP
php抽象类用法实例分析
2015/07/07 PHP
Symfony2联合查询实现方法
2016/03/18 PHP
php查询操作实现投票功能
2016/05/09 PHP
php设计模式之观察者模式定义与用法经典示例
2019/09/19 PHP
用于节点操作的API,颠覆原生操作HTML DOM节点的API
2010/12/11 Javascript
如何在指定的地方插入html内容和文本内容
2013/12/23 Javascript
在JS数组特定索引处指定位置插入元素
2014/07/27 Javascript
详细分析JavaScript变量类型
2015/07/08 Javascript
js实现Select头像选择实时预览代码
2015/08/17 Javascript
js生成随机数的过程解析
2015/11/24 Javascript
基于HTML+CSS+JS实现增加删除修改tab导航特效代码
2016/08/05 Javascript
bootstrap实现的自适应页面简单应用示例
2017/03/09 Javascript
纯js的右下角弹窗实例
2017/03/12 Javascript
[js高手之路]设计模式系列课程-发布者,订阅者重构购物车的实例
2017/08/29 Javascript
微信小程序实现轮播图效果
2017/09/07 Javascript
详解如何从零开始搭建Express+Vue开发环境
2018/07/17 Javascript
Python使用pymysql从MySQL数据库中读出数据的方法
2018/07/25 Python
解决每次打开pycharm直接进入项目的问题
2018/10/28 Python
pygame游戏之旅 调用按钮实现游戏开始功能
2018/11/21 Python
python绘制双Y轴折线图以及单Y轴双变量柱状图的实例
2019/07/08 Python
python查找重复图片并删除(图片去重)
2019/07/16 Python
python实现桌面气泡提示功能
2019/07/29 Python
深入浅出CSS3 background-clip,background-origin和border-image教程
2011/01/27 HTML / CSS
英国版MAC彩妆品牌:Illamasqua
2018/04/18 全球购物
日本酒店、民宿、温泉旅馆、当地旅行团中文预订:e路东瀛
2019/12/09 全球购物
DBA数据库管理员JAVA程序员架构师必看
2016/02/07 面试题
什么是lambda函数
2013/09/17 面试题
传播学专业毕业生自荐信
2013/11/04 职场文书
大学生如何写自荐信
2014/01/08 职场文书
退休教师欢送会主持词
2014/03/31 职场文书
机械制造专业大学生自我鉴定
2014/09/19 职场文书
不会写演讲稿,快来看看这篇文章!
2019/08/06 职场文书
nginx location优先级的深入讲解
2021/03/31 Servers
Spring Bean的实例化之属性注入源码剖析过程
2021/06/13 Java/Android
如何理解python接口自动化之logging日志模块
2021/06/15 Python