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新手上路(十四)
Oct 09 PHP
php你的验证码安全码?
Jan 02 PHP
PHP 输出缓存详解
Jun 20 PHP
深入php数据采集的详解
Jun 02 PHP
php中如何使对象可以像数组一样进行foreach循环
Aug 09 PHP
PHP OPP机制和模式简介(抽象类、接口和契约式编程)
Jun 09 PHP
php连接与操作PostgreSQL数据库的方法
Dec 25 PHP
php从给定url获取文件扩展名的方法
Mar 14 PHP
PHP如何实现Unicode和Utf-8编码相互转换
Jul 29 PHP
php阿拉伯数字转中文人民币大写
Dec 21 PHP
关于Yii2框架跑脚本时内存泄漏问题的分析与解决
Dec 01 PHP
PHP实现创建一个RPC服务操作示例
Feb 23 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 数组的合并、拆分、区别取值函数集
2010/02/15 PHP
两种php去除二维数组的重复项方法
2015/11/04 PHP
PHP程序中使用adodb连接不同数据库的代码实例
2015/12/19 PHP
laravel5.6实现数值转换
2019/10/23 PHP
php+iframe 实现上传文件功能示例
2020/03/04 PHP
Mootools 1.2教程 选项卡效果(Tabs)
2009/09/15 Javascript
JavaScript DOM 学习第五章 表单简介
2010/02/19 Javascript
javascript避免数字计算精度误差的方法详解
2014/03/05 Javascript
简介JavaScript中Math.LOG10E属性的使用
2015/06/14 Javascript
JavaScript字符串常用的方法
2016/03/10 Javascript
js replace(a,b)之替换字符串中所有指定字符的方法
2016/08/17 Javascript
zTree异步加载展开第一级节点的实现方法
2017/09/05 Javascript
vue实现多组关键词对应高亮显示功能
2019/07/25 Javascript
快速解决layui弹窗按enter键不停弹窗的问题
2019/09/18 Javascript
node.js中stream流中可读流和可写流的实现与使用方法实例分析
2020/02/13 Javascript
python解析基于xml格式的日志文件
2017/02/25 Python
基于随机梯度下降的矩阵分解推荐算法(python)
2018/08/31 Python
解决pyttsx3无法封装的问题
2018/12/24 Python
解决Python找不到ssl模块问题 No module named _ssl的方法
2019/04/29 Python
Django app配置多个数据库代码实例
2019/12/17 Python
简单介绍一下pyinstaller打包以及安全性的实现
2020/06/02 Python
Python3.8安装Pygame教程步骤详解
2020/08/14 Python
python 实现客户端与服务端的通信
2020/12/23 Python
html5写一个BUI折叠菜单插件的实现方法
2019/09/11 HTML / CSS
西班牙土拨鼠床垫公司,感觉在云端:Marmota
2019/03/18 全球购物
皇家阿尔伯特英国官方商店:Royal Albert骨瓷
2019/03/25 全球购物
DBA的职责都有哪些
2012/05/16 面试题
采购经理岗位职责
2014/02/16 职场文书
创优争先心得体会
2014/09/11 职场文书
观看《筑梦中国》纪录片心得体会
2016/01/18 职场文书
家访教师心得体会
2016/01/23 职场文书
选对餐饮营销策略,营业额才会上涨
2019/08/27 职场文书
JS Canvas接口和动画效果大全
2021/04/29 Javascript
redis三种高可用方式部署的实现
2021/05/11 Redis
vue2实现provide inject传递响应式
2021/05/21 Vue.js
MySQL七种JOIN类型小结
2021/10/24 MySQL