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变量不能传送到下一页的解决方法
Nov 27 PHP
php debug 安装技巧
Apr 30 PHP
php preg_filter执行一个正则表达式搜索和替换
Feb 27 PHP
php安全之直接用$获取值而不$_GET 字符转义
Jun 03 PHP
解析php安全性问题中的:Null 字符问题
Jun 21 PHP
php将textarea数据提交到mysql出现很多空格的解决方法
Dec 19 PHP
9个比较实用的php代码片段
Mar 15 PHP
php使用CutyCapt实现网页截图保存的方法
Oct 03 PHP
php 自定义错误日志实例详解
Nov 12 PHP
PHP命名空间namespace的定义方法详解
Mar 29 PHP
php简单检测404页面的方法示例
Aug 23 PHP
PHP For循环字母A-Z当超过26个字母时输出AA,AB,AC
Feb 16 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弹出错误警告函数扩展性强
2014/01/17 PHP
PHP管理依赖(dependency)关系工具 Composer 安装与使用
2014/08/18 PHP
PHP消息队列用法实例分析
2016/02/12 PHP
浅谈mysql_query()函数的返回值问题
2016/09/05 PHP
php获取flash尺寸详细数据的方法
2016/11/12 PHP
PHP长连接实现与使用方法详解
2018/02/11 PHP
PDO::query讲解
2019/01/29 PHP
Jquery Ajax的Get方式时需要注意URL地方
2011/04/07 Javascript
jQuery中[attribute^=value]选择器用法实例
2014/12/31 Javascript
JS表格组件神器bootstrap table详解(基础版)
2015/12/08 Javascript
jQuery电话号码验证实例
2017/01/05 Javascript
jQuery实现三级联动效果
2017/03/02 Javascript
js微信应用场景之微信音乐相册案例分享
2017/08/11 Javascript
js实现图片放大展示效果
2017/08/30 Javascript
原生js+cookie实现购物车功能的方法分析
2017/12/21 Javascript
bootstrap fileinput插件实现预览上传照片功能
2018/01/23 Javascript
详解Nuxt.js Vue服务端渲染摸索
2018/02/08 Javascript
js异步接口并发数量控制的方法示例
2020/11/22 Javascript
python实现获取客户机上指定文件并传输到服务器的方法
2015/03/16 Python
Python爬取qq空间说说的实例代码
2018/08/17 Python
启动Atom并运行python文件的步骤
2018/11/09 Python
Python装饰器语法糖
2019/01/02 Python
Python with关键字,上下文管理器,@contextmanager文件操作示例
2019/10/17 Python
python实现俄罗斯方块游戏(改进版)
2020/03/13 Python
商务邀请函范文
2014/01/14 职场文书
小学生检讨书大全
2014/02/06 职场文书
校外活动方案
2014/08/28 职场文书
党支部群众路线整改措施思想汇报
2014/10/10 职场文书
商铺门面租房协议书
2014/10/21 职场文书
2014年初一班主任工作总结
2014/11/08 职场文书
2014年销售助理工作总结
2014/12/01 职场文书
音乐教师个人工作总结
2015/02/06 职场文书
继续教育个人总结
2015/03/03 职场文书
小学二年级语文教学反思
2016/03/03 职场文书
爱岗敬业事迹材料
2019/06/20 职场文书
教你漂亮打印Pandas DataFrames和Series
2021/05/29 Python