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 相关文章推荐
教你如何把一篇文章按要求分段
Oct 09 PHP
PHP文件上传原理简单分析
May 29 PHP
网站防止被刷票的一些思路与方法
Jan 08 PHP
Codeigniter的一些优秀特性总结
Jan 21 PHP
php返回当前日期或者指定日期是周几
May 21 PHP
双冒号 ::在PHP中的使用情况
Nov 05 PHP
WordPress迁移时一些常见问题的解决方法整理
Nov 24 PHP
PHP使用Mysqli类库实现完美分页效果的方法
Apr 07 PHP
Yii遍历行下每列数据的方法
Oct 17 PHP
php 人员权限管理(RBAC)实例(推荐)
May 24 PHP
PHP设计模式入门之状态模式原理与实现方法分析
Apr 26 PHP
php TP5框架生成二维码链接
Apr 01 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
dedecms模板标签代码官方参考
2007/03/17 PHP
简单的php 验证图片生成函数
2009/05/21 PHP
深入file_get_contents与curl函数的详解
2013/06/25 PHP
详解no input file specified 三种解决方法
2019/11/29 PHP
jQuery学习笔记 操作jQuery对象 CSS处理
2012/09/19 Javascript
不同Jquery版本引发的问题解决
2013/10/14 Javascript
iframe窗口高度自适应的实现方法
2014/01/08 Javascript
jQuery实现返回顶部功能
2016/02/23 Javascript
js实现(全选)多选按钮的方法【附实例】
2016/03/30 Javascript
jquery 遍历数组 each 方法详解
2016/05/25 Javascript
KnockoutJS 3.X API 第四章之数据控制流if绑定和ifnot绑定
2016/10/10 Javascript
JS实现的二叉树算法完整实例
2017/04/06 Javascript
谈谈对vue响应式数据更新的误解
2017/08/01 Javascript
详解node+express+ejs+bootstrap构建项目
2017/09/27 Javascript
jQuery中过滤器的基本用法示例
2017/10/11 jQuery
浅谈react 同构之样式直出
2017/11/07 Javascript
微信小程序在ios下Echarts图表不能滑动的问题解决
2019/07/10 Javascript
解决vue-cli项目开发运行时内存暴涨卡死电脑问题
2019/10/29 Javascript
JavaScript实现留言板案例
2020/03/17 Javascript
如何利用nodejs实现命令行游戏
2020/11/24 NodeJs
Flask框架使用DBUtils模块连接数据库操作示例
2018/07/20 Python
python实现写数字文件名的递增保存文件方法
2018/10/25 Python
简单了解python gevent 协程使用及作用
2019/07/22 Python
基于Python实现拆分和合并GIF动态图
2019/10/22 Python
关于python中plt.hist参数的使用详解
2019/11/28 Python
Python3查找列表中重复元素的个数的3种方法详解
2020/02/13 Python
利用django model save方法对未更改的字段依然进行了保存
2020/03/28 Python
pip安装tensorflow的坑的解决
2020/04/19 Python
Python字典取键、值对的方法步骤
2020/09/30 Python
公司任命书范本
2014/06/04 职场文书
2014国庆节主题活动方案:快乐的国庆节
2014/09/16 职场文书
荆州古城导游词
2015/02/06 职场文书
Pygame如何使用精灵和碰撞检测
2021/11/17 Python
如何打开Win11系统注册表编辑器?Win11注册表编辑器打开修复方法
2022/04/05 数码科技
用PYTHON去计算88键钢琴的琴键频率和音高
2022/04/10 Python