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 相关文章推荐
人尽可用的Windows技巧小贴士之下篇
Mar 22 PHP
php关于array_multisort多维数组排序的使用说明
Jan 04 PHP
php高级编程-函数-郑阿奇
Jul 04 PHP
如何在php中正确的使用json
Aug 06 PHP
PHP+memcache实现消息队列案例分享
May 21 PHP
Smarty局部缓存的几种方法简介
Jun 17 PHP
php 删除cookie方法详解
Dec 01 PHP
php实现比较两个文件夹异同的方法
Jun 18 PHP
Zend Framework教程之资源(Resources)用法实例详解
Mar 14 PHP
CI框架源码解读之利用Hook.php文件完成功能扩展的方法
May 18 PHP
一文掌握PHP Xdebug 本地与远程调试(小结)
Apr 23 PHP
php加速缓存器opcache,apc,xcache,eAccelerator原理与配置方法实例分析
Mar 02 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+javascript液晶时钟
2006/10/09 PHP
PHP中去掉字符串首尾空格的方法
2012/05/19 PHP
ThinkPHP视图查询详解
2014/06/30 PHP
php使用fputcsv()函数csv文件读写数据的方法
2015/01/06 PHP
php使用CURL模拟GET与POST向微信接口提交及获取数据的方法
2016/09/23 PHP
Zend Framework上传文件重命名的实现方法
2016/11/25 PHP
php封装一个异常的处理类
2017/06/08 PHP
js form 验证函数 当前比较流行的错误提示
2009/06/23 Javascript
javascript禁制后退键(Backspace)实例代码
2013/11/15 Javascript
jquery插件hiAlert实现网页对话框美化
2015/05/03 Javascript
使用js复制链接中的部分文字的方法
2015/07/30 Javascript
jQuery实现简单滚动动画效果
2016/04/07 Javascript
AngularJS ng-bind 指令简单实现
2016/07/30 Javascript
JavaScript数据类型和变量_动力节点Java学院整理
2017/06/26 Javascript
Vue 动态路由的实现及 Springsecurity 按钮级别的权限控制
2019/09/05 Javascript
Vue中jsx不完全应用指南小结
2019/11/01 Javascript
JS实现普通轮播图特效
2020/01/01 Javascript
Javascript如何实现双指控制图片功能
2020/02/25 Javascript
Python开发实例分享bt种子爬虫程序和种子解析
2014/05/21 Python
Python中内置的日志模块logging用法详解
2016/07/12 Python
Python实现二维数组按照某行或列排序的方法【numpy lexsort】
2017/09/22 Python
教你用一行Python代码实现并行任务(附代码)
2018/02/02 Python
Python实现将Excel转换成xml的方法示例
2018/08/25 Python
Python调用scp向服务器上传文件示例
2019/12/22 Python
Python socket聊天脚本代码实例
2020/01/02 Python
通过实例解析python创建进程常用方法
2020/06/19 Python
Python 解析简单的XML数据
2020/07/24 Python
python 自定义异常和主动抛出异常(raise)的操作
2020/12/11 Python
家庭户外服装:Hawkshead
2017/11/02 全球购物
英国豪华文具和皮具配件经典老品牌:Smythson(斯迈森)
2018/04/19 全球购物
国际领先的在线时尚服装和配饰店:DressLily
2019/03/03 全球购物
销售员试用期自我评价
2014/09/15 职场文书
2014幼儿园中班工作总结
2014/11/10 职场文书
Nginx配置并兼容HTTP实现代码解析
2021/03/31 Servers
SpringBoot集成Redis,并自定义对象序列化操作
2021/06/22 Java/Android
win10如何快速切换窗口 win10切换窗口快捷键分享
2022/07/23 数码科技