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 相关文章推荐
不用GD库生成当前时间的PNG格式图象的程序
Oct 09 PHP
不错的一篇面向对象的PHP开发模式(简写版)
Mar 15 PHP
PHP禁止页面缓存的代码
Oct 23 PHP
PHPer 需要了解的 5 个 Composer 小技巧
Aug 18 PHP
PHP中IP地址与整型数字互相转换详解
Aug 20 PHP
php将数组转换成csv格式文件输出的方法
Mar 14 PHP
PHP可变函数学习小结
Nov 29 PHP
WordPress中编写自定义存储字段的相关PHP函数解析
Dec 25 PHP
ThinkPHP连接Oracle数据库
Apr 22 PHP
Smarty高级应用之缓存操作技巧分析
May 14 PHP
php+ajax登录跳转登录实现思路
Jul 31 PHP
php命令行写shell实例详解
Jul 19 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 文件上传源码分析(RFC1867)
2009/10/30 PHP
PHP微信开发之有道翻译
2016/06/23 PHP
layui框架实现文件上传及TP3.2.3(thinkPHP)对上传文件进行后台处理操作示例
2018/05/12 PHP
PHP chunk_split()函数讲解
2019/02/12 PHP
javascript 避免闭包引发的问题
2009/03/17 Javascript
Jquery 动态循环输出表格具体方法
2013/11/23 Javascript
jQuery实现获取绑定自定义事件元素的方法
2015/12/02 Javascript
JavaScript中的对象继承关系
2016/08/01 Javascript
深入理解Angular中的依赖注入
2017/06/26 Javascript
vue自定义js图片碎片轮播图切换效果的实现代码
2019/04/28 Javascript
js代码实现轮播图
2020/05/04 Javascript
js实现随机圆与矩形功能
2020/10/29 Javascript
echarts浮动显示单位的实现方法示例
2020/12/04 Javascript
[54:51]Ti4 冒泡赛第二轮LGD vs C9 3
2014/07/14 DOTA
跟老齐学Python之有容乃大的list(4)
2014/09/28 Python
Python基于OpenCV实现视频的人脸检测
2018/01/23 Python
Python中常用信号signal类型实例
2018/01/25 Python
Python使用matplotlib简单绘图示例
2018/02/01 Python
pandas DataFrame实现几列数据合并成为新的一列方法
2018/06/08 Python
Django contenttypes 框架详解(小结)
2018/08/13 Python
Python Cookie 读取和保存方法
2018/12/28 Python
Python实现自动签到脚本的示例代码
2020/08/19 Python
德国团购网站:Groupon德国
2018/03/13 全球购物
韩国江南富人区高端时尚百货商场:Galleria(格乐丽雅)
2018/03/27 全球购物
意大利在线药房:shop-farmacia.it
2019/03/12 全球购物
青年创业培训欢迎词
2014/01/08 职场文书
高中班级口号
2014/06/09 职场文书
甘南现象心得体会
2014/09/11 职场文书
事业单位个人查摆问题及整改措施
2014/10/28 职场文书
2014年社区宣传工作总结
2014/12/02 职场文书
德能勤绩工作总结
2015/08/11 职场文书
教师培训学习心得体会
2016/01/21 职场文书
公文写作:新员工转正申请书范本3篇!
2019/08/07 职场文书
mybatis使用oracle进行添加数据的方法
2021/04/27 Oracle
Redis超详细讲解高可用主从复制基础与哨兵模式方案
2022/04/07 Redis
Mysql中的触发器定义及语法介绍
2022/06/25 MySQL