PHP扩展mcrypt实现的AES加密功能示例


Posted in PHP onJanuary 29, 2019

本文实例讲述了PHP扩展mcrypt实现的AES加密功能。分享给大家供大家参考,具体如下:

AES(Advanced Encryption Standard,高级加密标准)是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。Rijndael是在AES中使用的基本密码算法。

对于此算法网上流传有很多php代码实现的版本,其实php的扩展mcrypt完全支持此加密算法,不必要自己去写代码实现。先不说自己写费时费力(当然你若是想研究此加密算法,那另说),使用php代码实现的算法效率也不会太高。

mcrypt扩展在php中默认是没有的,需要自己安装配置,其方法可以在网上搜索,这里不在详述。你可以使用以下代码检查你的php环境是否支持mcrypt

$cipher_list = mcrypt_list_algorithms();//mcrypt支持的加密算法列表
$mode_list = mcrypt_list_modes(); //mcrypt支持的加密模式列表
echo '<xmp>';
print_r($cipher_list);
print_r($mode_list);

若你的环境支持mcrypt,输出结果应该如下:

Array
(
    [0] => cast-128
    [1] => gost
    [2] => rijndael-128
    [3] => twofish
    [4] => arcfour
    [5] => cast-256
    [6] => loki97
    [7] => rijndael-192
    [8] => saferplus
    [9] => wake
    [10] => blowfish-compat
    [11] => des
    [12] => rijndael-256
    [13] => serpent
    [14] => xtea
    [15] => blowfish
    [16] => enigma
    [17] => rc2
    [18] => tripledes
)
Array
(
    [0] => cbc
    [1] => cfb
    [2] => ctr
    [3] => ecb
    [4] => ncfb
    [5] => nofb
    [6] => ofb
    [7] => stream
)

例如本机采用wampserver环境,直接开启了mcrypt扩展:

PHP扩展mcrypt实现的AES加密功能示例

其中rijndael-128,rijndael-192,rijndael-256就是AES加密,3种分别是使用不同的数据块和密钥长度进行加密。

以下是使用扩展mcrypt实现AES加密的简单示例

/**
 * 利用mcrypt做AES加密解密
 * @author ts24<tsxw24@gmail.com>
 */
abstract class AES{
 /**
 * 算法,另外还有192和256两种长度
 */
 const CIPHER = MCRYPT_RIJNDAEL_128;
 /**
 * 模式
 */
 const MODE = MCRYPT_MODE_ECB;
 /**
 * 加密
 * @param string $key 密钥
 * @param string $str 需加密的字符串
 * @return type
 */
 static public function encode( $key, $str ){
 $iv = mcrypt_create_iv(mcrypt_get_iv_size(self::CIPHER,self::MODE),MCRYPT_RAND);
 return mcrypt_encrypt(self::CIPHER, $key, $str, self::MODE, $iv);
 }
 /**
 * 解密
 * @param type $key
 * @param type $str
 * @return type
 */
 static public function decode( $key, $str ){
 $iv = mcrypt_create_iv(mcrypt_get_iv_size(self::CIPHER,self::MODE),MCRYPT_RAND);
 return mcrypt_decrypt(self::CIPHER, $key, $str, self::MODE, $iv);
 }
}

使用示例:

$str = '我是明文我是明文我是明文我是明文我是明文dsfdghgasdfasdddddddd';
$key = 'aSGJLGYEWERWRREW4567i8o';
$str1=AES::encode($key, $str);
$str2=AES::decode($key, $str1);
echo '<xmp>';
var_dump($str);
var_dump($str1);
var_dump($str2);
var_dump(rtrim($str2));

输出结果

PHP扩展mcrypt实现的AES加密功能示例

问题,不知道是什么原因,解密后的字符串(见上图),末尾还留下有不可见的填充字符,当明文刚好可以分组时则没有。

PHP 相关文章推荐
深入理解PHP原理之Session Gc的一个小概率Notice
Apr 12 PHP
PHP基础知识回顾
Aug 16 PHP
php数组删除元素示例
Mar 21 PHP
thinkphp学习笔记之多表查询
Jul 28 PHP
PHP实现采集抓取淘宝网单个商品信息
Jan 08 PHP
详解PHP实现异步调用的4种方法
Mar 14 PHP
关于PHP中Session文件过多的问题及session文件保存位置
Mar 17 PHP
php+ajax登录跳转登录实现思路
Jul 31 PHP
php中通用的excel导出方法实例
Dec 30 PHP
php获取微信共享收货地址的方法
Dec 21 PHP
php连接mysql之mysql_connect()与mysqli_connect()的区别
Jul 19 PHP
php实现对短信验证码发送次数的限制实例讲解
Mar 04 PHP
Yii2.0建立公共方法简单示例
Jan 29 #PHP
使用vs code编辑调试php配置的方法
Jan 29 #PHP
Yii2.0实现的批量更新及批量插入功能示例
Jan 29 #PHP
详解关于php的xdebug配置(编辑器vscode)
Jan 29 #PHP
PDO::inTransaction讲解
Jan 28 #PHP
PDO::getAvailableDrivers讲解
Jan 28 #PHP
PDO::getAttribute讲解
Jan 28 #PHP
You might like
支持中文、字母、数字的PHP验证码
2015/05/04 PHP
PHP常用算法和数据结构示例(必看篇)
2017/03/15 PHP
JavaScript 中的replace方法说明
2007/04/13 Javascript
基于jquery &amp; json的省市区联动代码
2012/06/26 Javascript
jquery图片放大功能简单实现
2013/08/01 Javascript
jQuery Mobile弹出窗、弹出层知识汇总
2016/01/05 Javascript
基于jquery实现表格内容筛选功能实例解析
2016/05/09 Javascript
AngularJs ng-route路由详解及实例代码
2016/09/14 Javascript
bootstrap使用validate实现简单校验功能
2016/12/02 Javascript
微信小程序-获得用户输入内容
2017/02/13 Javascript
对于input 框限定输入值为浮点型的js代码
2017/09/25 Javascript
vue中的自定义分页插件组件的示例
2018/08/18 Javascript
详解如何使用webpack打包多页jquery项目
2019/02/01 jQuery
VueJs里利用CryptoJs实现加密及解密的方法示例
2019/04/29 Javascript
彻底揭秘keep-alive原理(小结)
2019/05/05 Javascript
python使用chardet判断字符串编码的方法
2015/03/13 Python
python实现自动更换ip的方法
2015/05/05 Python
详解Python的Twisted框架中reactor事件管理器的用法
2016/05/25 Python
Python简单实现自动删除目录下空文件夹的方法
2017/08/29 Python
Python中函数参数调用方式分析
2018/08/09 Python
Python基础学习之类与实例基本用法与注意事项详解
2019/06/17 Python
Python实现Mysql数据统计及numpy统计函数
2019/07/15 Python
深入浅析Python 中的sklearn模型选择
2019/10/12 Python
Python SQLAlchemy库的使用方法
2020/10/13 Python
Pytorch1.5.1版本安装的方法步骤
2020/12/31 Python
美国在线咖啡、茶和餐厅供应商:LollicupStore
2018/05/04 全球购物
Champion澳大利亚官网:美国冠军运动服装
2018/05/07 全球购物
三星俄罗斯授权在线商店:Samsung俄罗斯
2019/09/28 全球购物
华为的Java面试题
2014/03/07 面试题
简述网络文件系统NFS,并说明其作用
2016/10/19 面试题
药剂学专业应届生自荐信
2013/09/29 职场文书
员工廉洁自律承诺书
2014/05/26 职场文书
2014年幼儿园教学工作总结
2014/12/04 职场文书
电影开国大典观后感
2015/06/04 职场文书
2019年年中职场激励人心语录30条
2019/08/07 职场文书
swagger如何返回map字段注释
2021/07/03 Java/Android