标准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 相关文章推荐
通过ODBC连接的SQL SERVER实例
Oct 09 PHP
第七节--类的静态成员
Nov 16 PHP
PHP模块 Memcached功能多于Memcache
Jun 14 PHP
php设计模式 Prototype (原型模式)代码
Jun 26 PHP
比较好用的PHP防注入漏洞过滤函数代码
Apr 11 PHP
php setcookie函数的参数说明及其用法
Apr 20 PHP
ThinkPHP2.0读取MSSQL提示Incorrect syntax near the keyword 'AS'的解决方法
Jun 25 PHP
ThinkPHP 表单自动验证运用示例
Oct 13 PHP
Symfony模板的快捷变量用法实例
Mar 17 PHP
thinkPHP交易详情查询功能详解
Dec 02 PHP
详谈symfony window下的安装 安装时候出现的问题以及解决方法
Sep 28 PHP
YII2框架中日志的配置与使用方法实例分析
Mar 18 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之数组学习
2011/05/29 PHP
php数组合并与拆分实例分析
2015/06/12 PHP
php 浮点数比较方法详解
2017/05/05 PHP
Thinkphp集成抖音SDK的实现方法
2020/04/28 PHP
JavaScript this调用规则说明
2010/03/08 Javascript
js对象数组按属性快速排序
2011/01/31 Javascript
fancybox modal的完美解决(右上的X)
2012/10/30 Javascript
offsetHeight在OnLoad中获取为0的现象
2013/07/22 Javascript
flash调用js中的方法,让js传递变量给flash的办法及思路
2013/08/07 Javascript
javascript学习笔记之10个原生技巧
2014/05/21 Javascript
jquery通过扩展select控件实现支持enter或focus选择的方法
2015/11/19 Javascript
vue.js表格分页示例
2016/10/18 Javascript
NODE.JS跨域问题的完美解决方案
2016/10/20 Javascript
jquery中有哪些api jQuery主要API
2017/11/20 jQuery
vue axios重复点击取消上一次请求封装的方法
2019/06/19 Javascript
vantUI 获得piker选中值的自定义ID操作
2020/11/04 Javascript
[47:43]Alliance vs KG 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
tornado捕获和处理404错误的方法
2014/02/26 Python
Python3实现从文件中读取指定行的方法
2015/05/22 Python
python实现搜索本地文件信息写入文件的方法
2016/02/22 Python
Django实现分页功能
2018/07/02 Python
Django model select的多种用法详解
2019/07/16 Python
python数据类型可变不可变知识点总结
2020/03/06 Python
tensorflow模型文件(ckpt)转pb文件的方法(不知道输出节点名)
2020/04/22 Python
python解压zip包中文乱码解决方法
2020/11/27 Python
SIXPAD智能健身仪英国官网:革命性的训练装备品牌
2018/09/27 全球购物
计算机专业个人简短的自我评价
2013/10/23 职场文书
《花的勇气》教后反思
2014/02/12 职场文书
农村产权制度改革实施方案
2014/03/21 职场文书
幼儿教师演讲稿
2014/05/06 职场文书
周年庆典答谢词
2015/01/20 职场文书
[有人@你]你有一封绿色倡议书,请查收!
2019/07/18 职场文书
导游词之藏龙百瀑景区
2019/12/30 职场文书
15个值得收藏的JavaScript函数
2021/09/15 Javascript
Vue中使用import进行路由懒加载的原理分析
2022/04/01 Vue.js
idea下配置tomcat避坑详解
2022/04/12 Servers