标准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 相关文章推荐
dedecms 批量提取第一张图片最为缩略图的代码(文章+软件)
Oct 29 PHP
PHP初学者常见问题集合 修正版(21问答)
Mar 23 PHP
PHP curl_setopt()函数实例代码与参数分析
Jun 02 PHP
php异常处理技术,顶级异常处理器
Jun 13 PHP
php实现utf-8和GB2312编码相互转换函数代码
Feb 07 PHP
PHP获取当前页面URL函数实例
Oct 22 PHP
PHP计算日期相差天数实例分析
Feb 23 PHP
php实现生成验证码实例分享
Apr 10 PHP
PHP简单操作MongoDB的方法(安装及增删改查)
May 26 PHP
php微信开发之百度天气预报
Nov 18 PHP
thinkPHP5框架接口写法简单示例
Aug 05 PHP
PHP7移除的扩展和SAPI
Mar 09 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
用 Composer构建自己的 PHP 框架之基础准备
2014/10/30 PHP
ThinkPHP表单数据智能写入create方法实例分析
2015/09/27 PHP
php is_writable判断文件是否可写实例代码
2016/10/13 PHP
PHP自定义序列化接口Serializable用法分析
2017/12/29 PHP
php数组和链表的区别总结
2019/09/20 PHP
php获取是星期几的的一些常用姿势
2019/12/15 PHP
js window.event对象详尽解析
2009/02/17 Javascript
设置jsf的选择框h:selectOneMenu为不可编辑状态的方法
2014/01/07 Javascript
解决jQuery动态获取手机屏幕高和宽的问题
2014/05/07 Javascript
深入浅析JavaScript中对事件的三种监听方式
2015/09/29 Javascript
Javascript动画效果(4)
2016/10/11 Javascript
vue-router 手势滑动触发返回功能
2018/09/30 Javascript
mpvue 单文件页面配置详解
2018/12/02 Javascript
微信用户访问小程序的登录过程详解
2019/09/20 Javascript
javascript实现多边形碰撞检测
2020/10/24 Javascript
[03:11]不朽宝藏三外观展示
2020/09/18 DOTA
Python实现简单截取中文字符串的方法
2015/06/15 Python
PYTHON 中使用 GLOBAL引发的一系列问题
2016/10/12 Python
Windows 8.1 64bit下搭建 Scrapy 0.22 环境
2018/11/18 Python
Python scipy的二维图像卷积运算与图像模糊处理操作示例
2019/09/06 Python
python实现小世界网络生成
2019/11/21 Python
Python 求数组局部最大值的实例
2019/11/26 Python
Python urlencode和unquote函数使用实例解析
2020/03/31 Python
keras中的卷积层&amp;池化层的用法
2020/05/22 Python
JAVA SWT事件四种写法实例解析
2020/06/05 Python
Python Scrapy多页数据爬取实现过程解析
2020/06/12 Python
通过Python实现Payload分离免杀过程详解
2020/07/13 Python
深入理解HTML5定时器requestAnimationFrame的使用
2018/12/12 HTML / CSS
JBL英国官网:JBL UK
2018/07/04 全球购物
临床医学专业学生的自我评价分享
2013/11/21 职场文书
座谈会主持词
2014/03/20 职场文书
学生会部长竞聘书
2014/03/31 职场文书
教育专业毕业生推荐信
2014/07/10 职场文书
公司趣味运动会开幕词
2016/03/04 职场文书
职场中的你,辞职信写对了吗?
2019/06/26 职场文书
MySQL中的布尔值,怎么存储false或true
2021/06/04 MySQL