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 相关文章推荐
在windows iis5下安装php4.0+mysql之我见
Oct 09 PHP
php5 图片验证码实现代码
Dec 11 PHP
PHP include任意文件或URL介绍
Apr 29 PHP
PHP中使用glob函数实现一句话删除某个目录下的所有文件
Jul 22 PHP
PHP会话控制:Session与Cookie详解
Sep 27 PHP
Zend Framework实现留言本分页功能(附demo源码下载)
Mar 22 PHP
Smarty变量用法详解
May 11 PHP
php通过smtp邮件验证登陆的方法
May 11 PHP
PHP使用DOM和simplexml读取xml文档的方法示例
Feb 08 PHP
Yii2配置Nginx伪静态的方法
May 05 PHP
PHP7 mongoDB扩展使用的方法分享
May 02 PHP
Laravel 中使用简单的方法跟踪用户是否在线(推荐)
Oct 30 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中static,const与define的使用区别
2013/06/18 PHP
PHP中的use关键字概述
2014/07/23 PHP
thinkphp如何获取客户端IP
2015/11/03 PHP
php的debug相关函数用法示例
2016/07/11 PHP
PHP编程获取各个时间段具体时间的方法
2017/05/26 PHP
某人初学javascript的时候写的学习笔记
2010/12/30 Javascript
了解了这些才能开始发挥jQuery的威力
2013/10/10 Javascript
基于jquery实现的文字淡入淡出效果
2013/11/14 Javascript
Array 重排序方法和操作方法的简单实例
2014/01/24 Javascript
jquery 删除字符串最后一个字符的方法解析
2014/02/11 Javascript
JavaScript中获取纯正的undefined的方法
2016/03/06 Javascript
使用jsonp实现跨域获取数据实例讲解
2016/12/25 Javascript
Angularjs+bootstrap+table多选(全选)支持单击行选中实现编辑、删除功能
2017/03/27 Javascript
深入理解JS的事件绑定、事件流模型
2018/05/13 Javascript
javascript和php使用ajax通信传递JSON的实例
2018/08/21 Javascript
Python正则表达式匹配HTML页面编码
2015/04/08 Python
对变量赋值的理解--Pyton中让两个值互换的实现方法
2017/11/29 Python
python list是否包含另一个list所有元素的实例
2018/05/04 Python
Python使用pandas处理CSV文件的实例讲解
2018/06/22 Python
python SVD压缩图像的实现代码
2019/11/05 Python
Windows 下更改 jupyterlab 默认启动位置的教程详解
2020/05/18 Python
Python Mock模块原理及使用方法详解
2020/07/07 Python
实例讲解CSS3中Transform的perspective属性的用法
2016/04/22 HTML / CSS
css3实现冲击波效果的示例代码
2018/01/11 HTML / CSS
Lands’ End英国官方网站:高质量男女服装
2017/10/07 全球购物
Haglöfs瑞典官方网站:haglofs火柴棍,欧洲顶级户外品牌
2018/10/18 全球购物
strstr()的简单实现
2013/09/26 面试题
艺术应用与设计专业个人的自我评价
2013/11/19 职场文书
作文评语怎么写
2014/12/25 职场文书
教师党员承诺书2015
2015/01/21 职场文书
房产公证书样本
2015/01/23 职场文书
音乐之声观后感
2015/06/04 职场文书
堂吉诃德读书笔记
2015/06/30 职场文书
2015年中学总务处工作总结
2015/07/22 职场文书
关于Vue Router的10条高级技巧总结
2021/05/06 Vue.js
python必学知识之文件操作(建议收藏)
2021/05/30 Python