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 相关文章推荐
MySQL相关说明
Jan 15 PHP
php 将excel导入mysql
Nov 09 PHP
PHP日期处理函数 整型日期格式
Jan 12 PHP
一个显示效果非常不错的PHP错误、异常处理类
Mar 21 PHP
PhpDocumentor 2安装以及生成API文档的方法
May 21 PHP
php集成套件服务器xampp安装使用教程(适合第一次玩PHP的新手)
Jun 03 PHP
php类的扩展和继承用法实例
Jun 20 PHP
变量在 PHP7 内部的实现(二)
Dec 21 PHP
PHP微信刮刮卡 附微信接口
Jul 22 PHP
yii2学习教程之5种内置行为类详解
Aug 03 PHP
PHP Class SoapClient not found解决方法
Jan 20 PHP
解决laravel(5.5)访问public报错的问题
Oct 12 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
浅析ThinkPHP中execute和query方法的区别
2014/06/13 PHP
jQuery获取json后使用zy_tmpl生成下拉菜单
2015/03/27 PHP
PHP按一定比例压缩图片的方法
2018/10/12 PHP
动态为事件添加js代码示例
2009/02/15 Javascript
jQuery1.5.1 animate方法源码阅读
2011/04/05 Javascript
jQuery去掉字符串起始和结尾的空格(多种方法实现)
2013/04/01 Javascript
JS实现商品倒计时实现代码
2013/05/03 Javascript
js实现带有介绍的Select列表菜单实例
2015/08/18 Javascript
JS给Textarea文本框添加行号的方法
2015/08/20 Javascript
浅析JS运动
2015/12/28 Javascript
JavaScript绑定事件监听函数的通用方法
2016/05/14 Javascript
nodejs使用express创建一个简单web应用
2017/03/31 NodeJs
Javascript ES6中数据类型Symbol的使用详解
2017/05/02 Javascript
vue组件学习教程
2017/09/09 Javascript
vue.js中npm安装教程图解
2018/04/10 Javascript
vue-cli中安装方法(图文详细步骤)
2018/12/12 Javascript
微信小程序设置全局请求URL及封装wx.request请求操作示例
2019/04/02 Javascript
Koa从零搭建到Api实现项目的搭建方法
2019/07/30 Javascript
[36:41]完美世界DOTA2联赛循环赛FTD vs Magma第一场 10月30日
2020/10/31 DOTA
在Debian下配置Python+Django+Nginx+uWSGI+MySQL的教程
2015/04/25 Python
基于python requests库中的代理实例讲解
2018/05/07 Python
Vertbaudet西班牙网上商店:婴儿服装、童装、母婴用品和儿童家具
2019/10/16 全球购物
巴西最大的巴士票务门户:Quero Passagem
2020/11/21 全球购物
远东集团网络工程师面试题
2014/10/20 面试题
应届毕业生个人自我评价
2013/09/20 职场文书
养殖行业的创业计划书
2014/01/05 职场文书
党员领导干部承诺书
2014/05/28 职场文书
安全生产知识竞赛活动总结
2014/07/07 职场文书
2014党员民主评议个人思想剖析发言
2014/09/19 职场文书
乡镇防汛工作汇报
2014/10/28 职场文书
学术会议通知
2015/04/15 职场文书
给朋友的道歉短信
2015/05/12 职场文书
当幸福来敲门观后感
2015/06/01 职场文书
《称赞》教学反思
2016/02/17 职场文书
Python爬取某拍短视频
2021/06/11 Python
Redis实战高并发之扣减库存项目
2022/04/14 Redis