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 采集获取指定网址的内容
Jan 05 PHP
PHP5.3.1 不再支持ISAPI
Jan 08 PHP
一些需要禁用的PHP危险函数(disable_functions)
Feb 23 PHP
php中拷贝构造函数、赋值运算符重载
Jul 25 PHP
如何使用php绘制在图片上的正余弦曲线
Jun 08 PHP
探讨Hessian在PHP中的使用分析
Jun 13 PHP
PHP CURL CURLOPT参数说明(curl_setopt)
Sep 30 PHP
php使用指定字符列表生成随机字符串的方法
Apr 18 PHP
php微信开发之上传临时素材
Jun 24 PHP
PHP中的密码加密的解决方案总结
Oct 26 PHP
yii2.0整合阿里云oss删除单个文件的方法
Sep 19 PHP
php实现生成带二维码图片并强制下载功能
Feb 24 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
Terran兵种对照表
2020/03/14 星际争霸
在服务端进行目录建立、删除,文件上传、删除的过程的php代码
2008/09/10 PHP
支持数组的ADDSLASHES的php函数
2010/02/16 PHP
php简单分页类实现方法
2015/02/26 PHP
JSON用法之将PHP数组转JS数组,JS如何接收PHP数组
2015/10/08 PHP
php微信高级接口调用方法(自定义菜单接口、客服接口、二维码)
2016/11/28 PHP
Swoole源码中如何查询Websocket的连接问题详解
2020/08/30 PHP
给moz-firefox下添加IE方法和属性
2007/04/10 Javascript
jquery 表单进行客户端验证demo
2009/08/24 Javascript
Javascript学习笔记1 数据类型
2010/01/11 Javascript
jquery与prototype框架的详细对比
2013/11/21 Javascript
JQuery控制Radio选中方法分析
2015/05/29 Javascript
antd组件Upload实现自己上传的实现示例
2018/12/18 Javascript
vue项目首屏打开速度慢的解决方法
2019/03/31 Javascript
ES6模板字符串和标签模板的应用实例分析
2019/06/25 Javascript
Vue移动端项目实现使用手机预览调试操作
2020/07/18 Javascript
Js图片点击切换轮播实现代码
2020/07/27 Javascript
python实现随机密码字典生成器示例
2014/04/09 Python
详解Python中映射类型的内建函数和工厂函数
2015/08/19 Python
Python 的内置字符串方法小结
2016/03/15 Python
numpy实现合并多维矩阵、list的扩展方法
2018/05/08 Python
python下载微信公众号相关文章
2019/02/26 Python
python基于celery实现异步任务周期任务定时任务
2019/12/30 Python
tensorflow之获取tensor的shape作为max_pool的ksize实例
2020/01/04 Python
python GUI框架pyqt5 对图片进行流式布局的方法(瀑布流flowlayout)
2020/03/12 Python
如何使用PyCharm将代码上传到GitHub上(图文详解)
2020/04/27 Python
浅析Python迭代器的高级用法
2020/07/16 Python
python如何绘制疫情图
2020/09/16 Python
canvas仿写贝塞尔曲线的示例代码
2017/12/29 HTML / CSS
全球虚拟主机商:HostGator
2017/02/06 全球购物
医学生个人求职信范文
2013/09/24 职场文书
2014两会学习心得:时代的发展
2014/03/17 职场文书
建筑工程技术专业求职信
2014/07/16 职场文书
地质工程专业毕业生求职信
2014/08/08 职场文书
党的群众路线教育实践活动个人对照检查材料(教师)
2014/11/04 职场文书
2016年公司中秋节致辞
2015/11/26 职场文书