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 相关文章推荐
有关JSON以及JSON在PHP中的应用
Apr 09 PHP
PHP文件操作实现代码分享
Sep 01 PHP
PHP支持多种格式图片上传(支持jpg、png、gif)
Nov 03 PHP
解析MySql与Java的时间类型
Jun 22 PHP
php获取中文拼音首字母类和函数分享
Apr 24 PHP
PHP中Fatal error session_start()错误解决步骤
Aug 05 PHP
Codeigniter检测表单post数据的方法
Mar 21 PHP
php上传图片并压缩的实现方法
Dec 22 PHP
PHP单例模式与工厂模式详解
Aug 29 PHP
浅谈PHP接入(第三方登录)QQ登录 OAuth2.0 过程中遇到的坑
Oct 13 PHP
php表单处理操作
Nov 16 PHP
php中array_fill函数的实例用法
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实现姓名根据首字母排序的类与方法(实例代码)
2018/05/16 PHP
Laravel 默认邮箱登录改成用户名登录的实现方法
2019/08/12 PHP
PHP正则表达式函数preg_replace用法实例分析
2020/06/04 PHP
一个加载js文件的小脚本
2007/06/28 Javascript
JS中判断null、undefined与NaN的方法
2014/03/26 Javascript
Jquery方式获取iframe页面中的 Dom元素
2014/05/07 Javascript
javascript自定义函数参数传递为字符串格式
2014/07/29 Javascript
JavaScript原生对象之Number对象的属性和方法详解
2015/03/13 Javascript
jquery实现点击查看更多内容控制段落文字展开折叠效果
2015/08/06 Javascript
jQuery实现的网页左侧在线客服效果代码
2015/10/23 Javascript
javascript瀑布流式图片懒加载实例解析与优化
2016/02/23 Javascript
javascript拖拽应用实例
2016/03/25 Javascript
JS 数字转换为大写金额的简单实例
2016/08/04 Javascript
jQuery实现立体式数字动态增加(animate方法)
2016/12/21 Javascript
js实现适配不同的屏幕大小
2017/04/10 Javascript
JS实现页面内跳转的简单代码
2017/09/03 Javascript
微信小程序内拖动图片实现移动、放大、旋转的方法
2018/09/04 Javascript
微信小程序实现电子签名并导出图片
2020/05/27 Javascript
js实现九宫格布局效果
2020/05/28 Javascript
解决vue的touchStart事件及click事件冲突问题
2020/07/21 Javascript
[01:04:39]OG vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
python解析html开发库pyquery使用方法
2014/02/07 Python
视觉直观感受若干常用排序算法
2017/04/13 Python
Python找出最小的K个数实例代码
2018/01/04 Python
Python对列表的操作知识点详解
2019/08/20 Python
PyQt5 closeEvent关闭事件退出提示框原理解析
2020/01/08 Python
python 最简单的实现适配器设计模式的示例
2020/06/30 Python
浅析HTML5页面元素及属性
2021/01/20 HTML / CSS
英国网络托管和域名领导者:Web Hosting UK
2017/10/15 全球购物
专业毕业生个性的自我评价
2013/10/03 职场文书
科研课题实施方案
2014/03/18 职场文书
2014年机关党建工作总结
2014/11/11 职场文书
店铺转让协议书
2015/01/29 职场文书
酒会开场白大全
2015/06/01 职场文书
网络舆情信息简报
2015/07/21 职场文书
Java8利用Stream对列表进行去除重复的方法详解
2022/04/14 Java/Android