标准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 什么是PEAR?
Mar 19 PHP
php 随机数的产生、页面跳转、件读写、文件重命名、switch语句
Aug 07 PHP
php面向对象全攻略 (十二) 抽象方法和抽象类
Sep 30 PHP
PHP设计模式之解释器模式的深入解析
Jun 13 PHP
解析curl提交GET,POST,Cookie的简单方法
Jun 29 PHP
php var_export与var_dump 输出的不同
Aug 09 PHP
php调整gif动画图片尺寸示例代码分享
Dec 05 PHP
自己写了一个php检测文件编码的函数
Apr 21 PHP
php从csv文件读取数据并输出到网页的方法
Mar 14 PHP
PHP后端银联支付及退款实例代码
Jun 23 PHP
ThinkPHP整合datatables实现服务端分页的示例代码
Feb 10 PHP
PHP实现基本留言板功能原理与步骤详解
Mar 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
PHP header()函数常用方法总结
2014/04/11 PHP
解决FLASH需要点击激活的代码
2006/12/20 Javascript
让网页根据不同IE版本显示不同的内容
2009/02/08 Javascript
使用js获取图片原始尺寸
2014/12/03 Javascript
jQuery平滑旋转幻灯片特效代码分享
2015/09/07 Javascript
jQuery 特性操作详解及实例代码
2016/09/29 Javascript
Bootstrap源码学习笔记之bootstrap进度条
2016/12/24 Javascript
图解Javascript——作用域、作用域链、闭包
2017/03/21 Javascript
vue 文件目录结构详解
2017/11/24 Javascript
Vue页面骨架屏的实现方法
2018/05/22 Javascript
axios 封装上传文件的请求方法
2018/09/26 Javascript
解决Vue router-link绑定事件不生效的问题
2020/07/22 Javascript
python随机生成指定长度密码的方法
2015/04/04 Python
Python中几种操作字符串的方法的介绍
2015/04/09 Python
Python 登录网站详解及实例
2017/04/11 Python
Python 3.x读写csv文件中数字的方法示例
2017/08/29 Python
利用Python如何批量修改数据库执行Sql文件
2018/07/29 Python
Python日期时间模块datetime详解与Python 日期时间的比较,计算实例代码
2018/09/14 Python
浅谈pyqt5中信号与槽的认识
2019/02/17 Python
django配置连接数据库及原生sql语句的使用方法
2019/03/03 Python
Python CVXOPT模块安装及使用解析
2019/08/01 Python
pytorch之Resize()函数具体使用详解
2020/02/27 Python
Python fileinput模块如何逐行读取多个文件
2020/10/05 Python
Weblogic和WebSphere不同特点
2012/05/09 面试题
办理信用卡工作证明
2014/01/11 职场文书
环境科学专业优秀毕业生自荐书
2014/02/03 职场文书
节约电力资源的建议书
2014/03/12 职场文书
公司应聘求职信
2014/06/21 职场文书
文秘班元旦晚会活动策划方案
2014/08/28 职场文书
民主评议党员自我评价材料
2014/09/18 职场文书
母亲节感言
2015/08/03 职场文书
导游词之徐州云龙湖
2019/11/19 职场文书
python爬虫框架feapde的使用简介
2021/04/20 Python
手把手教你从零开始react+antd搭建项目
2021/06/03 Javascript
Python实现列表拼接和去重的三种方式
2021/07/02 Python
Spring Boot 排除某个类加载注入IOC的操作
2021/08/02 Java/Android