标准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个人网站架设连环讲(三)
Oct 09 PHP
php的urlencode()URL编码函数浅析
Aug 09 PHP
coreseek 搜索英文的问题详解
Jun 08 PHP
php中file_get_contents与curl性能比较分析
Nov 08 PHP
一个经典的PHP文件上传类分享
Nov 18 PHP
PHP使用http_build_query()构造URL字符串的方法
Apr 02 PHP
php简单解析mysqli查询结果的方法(2种方法)
Jun 29 PHP
PHP解压ZIP文件到指定文件夹的方法
Nov 17 PHP
PHP判断是否微信访问的方法示例
Mar 27 PHP
PHP超级全局变量【$GLOBALS,$_SERVER,$_REQUEST等】用法实例分析
Dec 11 PHP
PHP实现创建一个RPC服务操作示例
Feb 23 PHP
PHP7 list() 函数修改
Mar 09 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
windwos下使用php连接oracle数据库的过程分享
2014/05/26 PHP
PHP 面向对象程序设计(oop)学习笔记 (五) - PHP 命名空间
2014/06/12 PHP
php使用ZipArchive函数实现文件的压缩与解压缩
2015/10/27 PHP
PHP+Jquery与ajax相结合实现下拉淡出瀑布流效果【无需插件】
2016/05/06 PHP
PHP生成短网址的思路以及实现方法的详解
2019/03/25 PHP
一个基于jquery的文本框记数器
2012/09/19 Javascript
setInterval()和setTimeout()的用法和区别示例介绍
2013/11/17 Javascript
IE6-8中Date不支持toISOString的修复方法
2014/05/04 Javascript
Javascript对象Clone实例分析
2015/06/09 Javascript
jquery无限级联下拉菜单简单实例演示
2015/11/23 Javascript
浅析javascript异步执行函数导致的变量变化问题解决思路
2016/05/13 Javascript
js获取iframe中的window对象的实现方法
2016/05/20 Javascript
jQuery实现ToolTip元素定位显示功能示例
2016/11/23 Javascript
react-router中的属性详解
2017/06/01 Javascript
angular2路由之routerLinkActive指令【推荐】
2018/05/30 Javascript
vue-auto-focus: 控制自动聚焦行为的 vue 指令方法
2018/08/25 Javascript
Vue+element 解决浏览器自动填充记住的账号密码问题
2019/06/11 Javascript
Vue实现导航栏的显示开关控制
2019/11/01 Javascript
django轻松使用富文本编辑器CKEditor的方法
2017/03/30 Python
Scrapy抓取京东商品、豆瓣电影及代码分享
2017/11/23 Python
python脚本实现验证码识别
2018/06/07 Python
Python向excel中写入数据的方法
2019/05/05 Python
Python如何把多个PDF文件合并代码实例
2020/02/13 Python
Python装饰器实现方法及应用场景详解
2020/03/26 Python
python实现图片转字符画
2021/02/19 Python
韩国休闲女装品牌网站:ANAIS
2016/08/24 全球购物
墨尔本复古时尚品牌:Dangerfield
2018/12/12 全球购物
写给女朋友的道歉信
2014/01/12 职场文书
小学生家长评语大全
2014/02/10 职场文书
生产部厂长助理职位说明书
2014/03/03 职场文书
2014小学教师个人工作总结
2014/11/10 职场文书
幼儿园大班个人总结
2015/02/28 职场文书
转正申请报告格式
2015/05/15 职场文书
2015年乡镇安全生产工作总结
2015/05/19 职场文书
生产车间管理制度
2015/08/04 职场文书
基于Apache Hudi在Google云构建数据湖平台的思路详解
2022/04/07 Servers