标准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 相关文章推荐
打造计数器DIY三步曲(下)
Oct 09 PHP
谈谈PHP的输入输出流
Feb 14 PHP
基于asp+ajax和数据库驱动的二级联动菜单
May 06 PHP
深入理解PHP原理之异常机制
Aug 21 PHP
php 操作数组(合并,拆分,追加,查找,删除等)
Jul 20 PHP
深入探讨<br />和 \r\n两者有什么区别??
Jun 05 PHP
探讨如何在php168_cms中提取验证码
Jun 08 PHP
PHP中spl_autoload_register函数的用法总结
Nov 07 PHP
php基于Snoopy解析网页html的方法
Jul 09 PHP
PHP数据对象PDO操作技巧小结
Sep 27 PHP
详解Laravel5.6 Passport实现Api接口认证
Jul 27 PHP
PHP+jQuery实现即点即改功能示例
Feb 21 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
德生BCL3000的电路分析和打磨
2021/03/02 无线电
Yii调试SQL的常用方法
2014/07/09 PHP
PHP判断浏览器、判断语言代码分享
2015/03/05 PHP
使用js在页面中绘制表格核心代码
2013/09/16 Javascript
用js读、写、删除Cookie代码分享及详细注释说明
2014/06/05 Javascript
js和jquery如何获取图片真实的宽度和高度
2014/09/28 Javascript
Jquery获取radio选中的值
2017/05/05 jQuery
js学习总结_轮播图之渐隐渐现版(实例讲解)
2017/07/17 Javascript
浅谈JS中的常用选择器及属性、方法的调用
2017/07/28 Javascript
jQuery进阶实践之利用最优雅的方式如何写ajax请求
2017/12/20 jQuery
详解vuex的简单使用
2018/03/12 Javascript
使用Vue实现图片上传的三种方式
2018/07/17 Javascript
Iview Table组件中各种组件扩展的使用
2018/10/20 Javascript
node链接mongodb数据库的方法详解【阿里云服务器环境ubuntu】
2019/03/07 Javascript
bootstrap-treeview实现多级树形菜单 后台JSON格式如何组织?
2019/07/26 Javascript
JavaScript 替换所有匹配内容及正则替换方法
2020/02/12 Javascript
[05:09]2016国际邀请赛中国区预选赛淘汰赛首日精彩回顾
2016/06/29 DOTA
python实现基于两张图片生成圆角图标效果的方法
2015/03/26 Python
Python程序中用csv模块来操作csv文件的基本使用教程
2016/03/03 Python
pip安装Python库时遇到的问题及解决方法
2017/11/23 Python
python更改已存在excel文件的方法
2018/05/03 Python
转换科学计数法的数值字符串为decimal类型的方法
2018/07/16 Python
解决python3插入mysql时内容带有引号的问题
2020/03/02 Python
python爬虫破解字体加密案例详解
2021/03/02 Python
Hoka One One法国官网:美国专业跑鞋品牌
2018/12/29 全球购物
HEMA法国:荷兰原创设计
2019/02/21 全球购物
通往英国高街的商店橱窗:Down Your High Street
2020/07/19 全球购物
银行求职信个人范文
2013/12/16 职场文书
财务部绩效考核方案
2014/05/04 职场文书
刑事附带民事起诉状
2015/05/19 职场文书
班主任工作经验交流会总结
2015/11/02 职场文书
五年级作文之想象作文
2019/10/30 职场文书
七年级作文之下雨天
2019/12/23 职场文书
springboot中的pom文件 project报错问题
2022/01/18 Java/Android
Android超详细讲解组件ScrollView的使用
2022/03/31 Java/Android
《巫师》是美食游戏?CDPR10月将推出《巫师》官方食谱
2022/04/03 其他游戏