标准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安全性漫谈
Jun 28 PHP
基于curl数据采集之单页面并行采集函数get_htmls的使用
Apr 28 PHP
解析二进制流接口应用实例 pack、unpack、ord 函数使用方法
Jun 18 PHP
PHP 抽象方法与抽象类abstract关键字介绍及应用
Oct 16 PHP
PHP实现通过Luhn算法校验信用卡卡号是否有效
Mar 23 PHP
解决php表单重复提交实现方法
Sep 29 PHP
PHP输入流php://input实例讲解
Dec 22 PHP
php unicode编码和字符串互转的方法
Aug 12 PHP
PHP 无限级分类
May 04 PHP
PHP如何通过表单直接提交大文件详解
Jan 08 PHP
PHP的Trait机制原理与用法分析
Oct 18 PHP
laravel实现图片上传预览,及编辑时可更换图片,并实时变化的例子
Nov 14 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
索尼SONY ICF-SW7600GR电路分析与改良
2021/03/02 无线电
浅析PHP递归函数返回值使用方法
2013/02/18 PHP
PHP 动态生成静态HTML页面示例代码
2014/01/15 PHP
php写的AES加密解密类分享
2014/06/20 PHP
PHP生成和获取XML格式数据的方法
2016/03/04 PHP
PHPExcel实现表格导出功能示例【带有多个工作sheet】
2018/06/13 PHP
PHP输出Excel PHPExcel的方法
2018/07/26 PHP
Yii框架实现对数据库的CURD操作示例
2019/09/03 PHP
基于jquery的blockui插件显示弹出层
2011/04/14 Javascript
jquery Mobile入门—多页面切换示例学习
2013/01/08 Javascript
使用js如何实现全选与全不选
2013/12/30 Javascript
一个JavaScript的求爱小特效
2014/05/09 Javascript
JavaScript函数定义的常见注意事项小结
2014/09/16 Javascript
浅谈JavaScript的自动垃圾收集机制
2016/12/15 Javascript
vue实现模态框的通用写法推荐
2018/02/26 Javascript
微信公众号H5支付接口调用方法
2019/01/10 Javascript
swiper实现异形轮播效果
2019/11/28 Javascript
[00:36]DOTA2上海特级锦标赛 LGD战队宣传片
2016/03/04 DOTA
[43:53]OG vs EG 2019国际邀请赛淘汰赛 胜者组 BO3 第三场 8.22
2019/09/05 DOTA
理解Python中函数的参数
2015/04/27 Python
学习python 之编写简单乘法运算题
2016/02/27 Python
python列表的常用操作方法小结
2016/05/21 Python
Python 安装setuptools和pip工具操作方法(必看)
2017/05/22 Python
学习python分支结构
2019/05/17 Python
Django中ORM找出内容不为空的数据实例
2020/05/20 Python
浅谈django框架集成swagger以及自定义参数问题
2020/07/07 Python
Python中random模块常用方法的使用教程
2020/10/04 Python
简述进程的启动、终止的方式以及如何进行进程的查看
2013/07/12 面试题
篮球比赛拉拉队口号
2014/06/10 职场文书
售房协议书
2014/08/19 职场文书
2015年学校心理健康教育工作总结
2015/05/11 职场文书
女性健康知识讲座主持词
2015/07/04 职场文书
小学中队委竞选稿
2015/11/20 职场文书
考教师资格证不要错过的4个最佳时机
2019/07/17 职场文书
python文件名批量重命名脚本实例代码
2021/04/22 Python
生命的关键成分来自太空?陨石说是的
2022/04/29 数码科技