标准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 用checkbox一次性删除多条记录的方法
Feb 23 PHP
PHP为表单获取的URL 地址预设 http 字符串函数代码
May 26 PHP
thinkphp的c方法使用示例
Feb 24 PHP
php实现检查文章是否被百度收录
Jan 27 PHP
Thinkphp 中 distinct 的用法解析
Dec 14 PHP
PHP使用mysqli操作MySQL数据库的简单方法
Feb 04 PHP
PHP redis实现超迷你全文检索
Mar 04 PHP
PHP有序表查找之二分查找(折半查找)算法示例
Feb 09 PHP
php框架CodeIgniter主从数据库配置方法分析
May 25 PHP
TP(thinkPHP)框架多层控制器和多级控制器的使用示例
Jun 13 PHP
php中关于换行的实例写法
Sep 26 PHP
PHP基本语法
Mar 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
Thinkphp使用mongodb数据库实现多条件查询方法
2014/06/26 PHP
php实现最简单的MVC框架实例教程
2014/09/08 PHP
php实现微信模板消息推送
2018/03/30 PHP
Yii 使用intervention/image拓展实现图像处理功能
2019/06/22 PHP
jquery checkbox全选、取消全选实现代码
2010/03/05 Javascript
一个简单的jQuery插件制作 学习过程及实例
2010/04/25 Javascript
用jquery实现下拉菜单效果的代码
2010/07/25 Javascript
深入理解JavaScript系列(26):设计模式之构造函数模式详解
2015/03/03 Javascript
javascript正则表达式之分组概念与用法实例
2016/06/16 Javascript
客户端验证用户名和密码的方法详解
2016/06/16 Javascript
Bootstrap3制作搜索框样式的方法
2016/07/11 Javascript
js 基础篇必看(点击事件轮播图的简单实现)
2016/08/20 Javascript
jQuery设计思想
2017/03/07 Javascript
vue中v-model动态生成的实例详解
2017/10/27 Javascript
微信小程序遍历Echarts图表实现多个饼图
2019/04/25 Javascript
微信小程序跳转到其他网页(外部链接)的实现方法
2019/09/20 Javascript
vue 路由子组件created和mounted不起作用的解决方法
2019/11/05 Javascript
简单了解JS打开url的方法
2020/02/21 Javascript
js判断密码强度的方法
2020/03/18 Javascript
[01:55]《走出家门看比赛》——DOTA2 2015国际邀请赛同城线下观战
2015/07/18 DOTA
Python使用pylab库实现画线功能的方法详解
2017/06/08 Python
用十张图详解TensorFlow数据读取机制(附代码)
2018/02/06 Python
python爬取m3u8连接的视频
2018/02/28 Python
使用Python控制摄像头拍照并发邮件
2019/04/23 Python
解决python 读取 log日志的编码问题
2019/12/24 Python
韩国休闲女装品牌网站:ANAIS
2016/08/24 全球购物
优衣库澳大利亚官网:UNIQLO澳大利亚
2017/01/18 全球购物
美国婴儿和儿童服装购物网站:PatPat
2020/10/01 全球购物
华硕新加坡官方网上商店:ASUS Singapore
2020/07/09 全球购物
毕业生个人的求职信范文
2013/12/03 职场文书
中秋节寄语2015
2015/03/24 职场文书
酒店客房服务员岗位职责
2015/04/09 职场文书
公积金贷款承诺书
2015/04/30 职场文书
2015年党小组工作总结
2015/05/26 职场文书
小学远程教育工作总结
2015/08/13 职场文书
vue实现滑动解锁功能
2022/03/03 Vue.js