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 相关文章推荐
使用 eAccelerator加速PHP代码的方法
Sep 30 PHP
追求程序速度,而不是编程的速度
Apr 23 PHP
codeigniter使用技巧批量插入数据实例方法分享
Dec 31 PHP
百度地图API应用之获取用户的具体位置
Jun 10 PHP
php字符串按照单词进行反转的方法
Mar 14 PHP
PHP中is_file()函数使用指南
May 08 PHP
PHP会话处理的10个函数
Aug 11 PHP
php简单实现多语言切换的方法
May 09 PHP
php关闭warning问题的解决方法
May 17 PHP
php微信开发之自定义菜单完整流程
Oct 08 PHP
PHP开发之用微信远程遥控服务器
Jan 25 PHP
PHP多个图片压缩成ZIP的方法
Aug 18 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简单的会话类代码
2011/08/08 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(一)
2014/06/23 PHP
CodeIgniter框架基本增删改查操作示例
2017/03/23 PHP
jquery.ui.progressbar 中文文档
2009/11/26 Javascript
javascript对象之内置对象Math使用方法
2010/04/16 Javascript
javaScript中两个等于号和三个等于号之间的区别介绍
2014/06/27 Javascript
JS按回车键实现登录的方法
2014/08/25 Javascript
Backbone.js中的集合详解
2015/01/14 Javascript
设计模式中的facade外观模式在JavaScript开发中的运用
2016/05/18 Javascript
Vue.js每天必学之Class与样式绑定
2016/09/05 Javascript
浅述节点的创建及常见功能的实现
2016/12/15 Javascript
vue.js动态数据绑定学习笔记
2017/05/19 Javascript
vue.js 获取当前自定义属性值
2017/06/01 Javascript
JavaScript常见鼠标事件与用法分析
2019/01/03 Javascript
详解如何运行vue项目
2019/04/15 Javascript
Vue.js+cube-ui(Scroll组件)实现类似头条效果的横向滚动导航条
2019/06/24 Javascript
vue.js实现双击放大预览功能
2020/06/23 Javascript
[47:03]完美世界DOTA2联赛PWL S3 access vs LBZS 第一场 12.20
2020/12/23 DOTA
Python实现备份文件实例
2014/09/16 Python
Python 操作mysql数据库查询之fetchone(), fetchmany(), fetchall()用法示例
2019/10/17 Python
python将时分秒转换成秒的实例
2019/12/07 Python
Python模块的定义,模块的导入,__name__用法实例分析
2020/01/07 Python
python构造IP报文实例
2020/05/05 Python
通过自学python能找到工作吗
2020/06/21 Python
基于CentOS搭建Python Django环境过程解析
2020/08/24 Python
Python中的流程控制详解
2021/02/18 Python
Sahajan美国:阿育吠陀护肤品牌
2021/01/09 全球购物
广告设计专业自荐信范文
2013/11/14 职场文书
工会主席岗位责任制
2014/02/11 职场文书
办公室员工岗位工作职责
2014/03/10 职场文书
事业单位考核材料
2014/05/21 职场文书
2014党员民主评议个人总结
2014/09/10 职场文书
银行柜员与客户起冲突检讨书
2014/09/27 职场文书
2016领导干部廉洁从政心得体会
2016/01/19 职场文书
关于社会实践的心得体会(2016最新版)
2016/01/25 职场文书
七年级作文之环保作文
2019/10/17 职场文书