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中通过Ajax如何实现异步文件上传的代码实例
May 07 PHP
PHP array操作10个小技巧分享
Jun 23 PHP
PHP实例分享判断客户端是否使用代理服务器及其匿名级别
Jun 04 PHP
wordpress安装过程中遇到中文乱码的处理方法
Apr 21 PHP
以文件形式缓存php变量的方法
Jun 26 PHP
PHP.vs.JAVA
Apr 29 PHP
php字符串操作针对负值的判断分析
Jul 28 PHP
PHP 微信扫码支付源代码(推荐)
Nov 03 PHP
ThinkPHP框架实现的MySQL数据库备份功能示例
May 24 PHP
详细对比php中类继承和接口继承
Oct 11 PHP
PHP PDOStatement::getColumnMeta讲解
Feb 01 PHP
Laravel框架文件上传功能实现方法示例
Apr 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核心代码分析require和include的区别
2011/01/02 PHP
FirePHP 推荐一款PHP调试工具
2011/04/23 PHP
PHP检测用户是否关闭浏览器的方法
2016/02/14 PHP
PHP支付宝当面付2.0代码
2018/12/21 PHP
php写app用的框架整理
2019/09/29 PHP
Laravel框架实现抢红包功能示例
2019/10/31 PHP
php 多继承的几种常见实现方法示例
2019/11/18 PHP
如何做到打开一个页面,过几分钟自动转到另一页面
2007/04/20 Javascript
jQuery1.5.1 animate方法源码阅读
2011/04/05 Javascript
JS随机生成不重复数据的实例方法
2013/07/17 Javascript
使用node.js半年来总结的 10 条经验
2014/08/18 Javascript
JavaScript使用循环和分割来替换和删除元素实例
2014/10/13 Javascript
教你如何使用node.js制作代理服务器
2014/11/26 Javascript
javascript框架设计读书笔记之字符串的扩展和修复
2014/12/02 Javascript
javascript继承的六大模式小结
2015/04/13 Javascript
常用js,css文件统一加载方法(推荐) 并在加载之后调用回调函数
2016/09/23 Javascript
jQuery和JavaScript节点插入元素的方法对比
2016/11/18 Javascript
JQuery 动态生成Table表格实例代码
2016/12/02 Javascript
jQuery Password Validation密码验证
2016/12/30 Javascript
轻松实现jQuery添加删除按钮Click事件
2017/03/13 Javascript
Vue 中使用vue2-highcharts实现曲线数据展示的方法
2018/03/05 Javascript
AngularJS实现的base64编码与解码功能示例
2018/05/17 Javascript
vue项目上传Github预览的实现示例
2018/11/06 Javascript
nodejs图片处理工具gm用法小结
2018/12/12 NodeJs
微信小程序云开发之模拟后台增删改查
2019/05/16 Javascript
JS如何定义用字符串拼接的变量
2020/07/11 Javascript
Python实现的简单dns查询功能示例
2017/05/24 Python
python多线程同步之文件读写控制
2021/02/25 Python
Matplotlib 折线图plot()所有用法详解
2020/07/28 Python
李宁官方网店:中国运动品牌
2017/11/02 全球购物
印度在线购买电子产品网站:Croma
2020/01/02 全球购物
购房意向书
2014/08/30 职场文书
孝敬父母的活动方案
2014/08/31 职场文书
班主任高考寄语
2015/02/26 职场文书
《烈火英雄》观后感:致敬和平时代的英雄
2019/11/11 职场文书
python爬虫请求库httpx和parsel解析库的使用测评
2021/05/10 Python