服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

PHP扩展mcrypt实现的AES加密功能示例

2019-06-21 14:20five-zh PHP教程

这篇文章主要介绍了PHP扩展mcrypt实现的AES加密功能,结合实例形式分析了php基于mcrypt实现AES加密的相关操作技巧,需要的朋友可以参考下

本文实例讲述了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中explode函数和split函数的区别小结

    PHP中explode函数和split函数的区别小结

    相信大家都知道,explode和split在php中都是可以通过特定字符把字符串转换成数组的,那么explode和split既然是一样的为什么会有两个函数呢,那么explode和split的区别在哪里呢,下面跟着小编我们一起来看看。...

    daisy3282019-06-20
  • PHP教程PHP树形结构tree类用法示例

    PHP树形结构tree类用法示例

    这篇文章主要介绍了PHP树形结构tree类用法,结合实例形式分析了php无限分类树tree.class.php的定义及使用相关操作技巧,需要的朋友可以参考下...

    快乐de馒头4632019-06-21
  • PHP教程PHP join()函数用法与实例讲解

    PHP join()函数用法与实例讲解

    今天小编就为大家分享一篇关于PHP join()函数用法与实例讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...

    php参考手册1212019-06-02
  • PHP教程PHP连接及操作PostgreSQL数据库的方法详解

    PHP连接及操作PostgreSQL数据库的方法详解

    这篇文章主要介绍了PHP连接及操作PostgreSQL数据库的方法,结合实例形式分析了php针对PostgreSQL数据库的基本连接以及增删改查等相关操作技巧,需要的朋友可以参考下...

    Lucky_wangtao4242019-06-21
  • PHP教程CI(CodeIgniter)框架中URL特殊字符处理与SQL注入隐患分析

    CI(CodeIgniter)框架中URL特殊字符处理与SQL注入隐患分析

    这篇文章主要介绍了CI(CodeIgniter)框架中URL特殊字符处理与SQL注入隐患,结合实例形式分析了CodeIgniter框架中针对特殊字符的过滤及SQL注入隐患的相关原理,需要的朋友可以参考下...

    流风,飘然的风4082019-06-09
  • PHP教程PHP levenshtein()函数用法讲解

    PHP levenshtein()函数用法讲解

    今天小编就为大家分享一篇关于PHP levenshtein()函数用法讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...

    php参考手册1352019-06-03
  • PHP教程PHP htmlspecialchars_decode()函数用法讲解

    PHP htmlspecialchars_decode()函数用法讲解

    今天小编就为大家分享一篇关于PHP htmlspecialchars_decode()函数用法讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...

    php参考手册5042019-06-06
  • PHP教程PHP的curl函数的用法总结

    PHP的curl函数的用法总结

    在本篇文章中小编给大家分享了关于PHP的curl函数的用法总结以及相关知识点内容,需要的读者们学习下。...

    laozhang3462019-06-15