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 文件缓存函数
Oct 08 PHP
php array_filter除去数组中的空字符元素
Jun 21 PHP
用PHP代码在网页上生成图片
Jul 01 PHP
php实现图片以base64显示的方法
Oct 13 PHP
简单谈谈PHP中的Reload操作
Dec 12 PHP
PHP实现防盗链的方法分析
Jul 25 PHP
PHP 实现人民币小写转换成大写的方法及大小写转换函数
Nov 17 PHP
php文件操作之文件写入字符串、数组的方法分析
Apr 15 PHP
PHP常见的序列化与反序列化操作实例分析
Oct 28 PHP
PHP防止sql注入小技巧之sql预处理原理与实现方法分析
Dec 13 PHP
tp5框架基于ajax实现异步删除图片的方法示例
Feb 10 PHP
PHP安全之register_globals的on和off的区别
Jul 23 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文本数据库的搜索方法
2006/10/09 PHP
深思 PHP 数组遍历的差异(array_diff 的实现)
2008/03/23 PHP
为PHP初学者的8点有效建议
2010/11/20 PHP
解析php通过cookies获取远程网页的指定代码
2013/06/25 PHP
php 检查电子邮件函数(自写)
2014/01/16 PHP
php简单实现批量上传图片的方法
2016/05/09 PHP
Yii2框架redis基本应用示例
2018/07/13 PHP
Smarty模板变量与调节器实例详解
2019/07/20 PHP
浅谈PHP中的那些魔术常量
2020/12/02 PHP
面向对象的Javascript之二(接口实现介绍)
2012/01/27 Javascript
JS禁用浏览器退格键实现思路及代码
2013/10/29 Javascript
Jquery解析Json格式数据过程代码
2014/10/17 Javascript
一步步教大家编写酷炫的导航栏js+css实现
2016/03/14 Javascript
JavaScript实现简单图片轮播效果
2017/08/21 Javascript
JS基于递归实现网页版计算器的方法分析
2017/12/20 Javascript
vue.js-div滚动条隐藏但有滚动效果的实现方法
2018/03/03 Javascript
基于JS实现一个随机生成验证码功能
2019/05/29 Javascript
Layui实现数据表格默认全部显示(不要分页)
2019/10/26 Javascript
[02:08]什么藏在DOTA2 TI9“小紫本”里?斧王历险记告诉你!
2019/05/17 DOTA
python基础教程之udp端口扫描
2014/02/10 Python
Python实现求数列和的方法示例
2018/01/12 Python
pandas数据清洗,排序,索引设置,数据选取方法
2018/05/18 Python
python实现翻转棋游戏(othello)
2019/07/29 Python
使用Keras中的ImageDataGenerator进行批次读图方式
2020/06/17 Python
python的链表基础知识点
2020/09/13 Python
python 操作excel表格的方法
2020/12/05 Python
自动化毕业生专业自荐书范文
2014/02/04 职场文书
毕业生个人求职自荐信
2014/02/26 职场文书
汽车机修工岗位职责
2014/03/06 职场文书
摄影专业毕业生求职信
2014/03/13 职场文书
中国梦口号
2014/06/13 职场文书
2015年房地产销售工作总结
2015/04/20 职场文书
MySQL中B树索引和B+树索引的区别详解
2022/03/03 MySQL
vue代码分块和懒加载非必要资源文件
2022/04/11 Vue.js
Spring Boot配合PageHelper优化大表查询数据分页
2022/04/20 Java/Android
浅谈Redis的事件驱动模型
2022/05/30 Redis