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扩展:
其中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));
输出结果
问题,不知道是什么原因,解密后的字符串(见上图),末尾还留下有不可见的填充字符,当明文刚好可以分组时则没有。
ps:关于加密解密感兴趣的朋友还可以参考本站在线工具:
文字在线加密解密工具(包含aes、des、rc4等):
md5在线加密工具:
http://tools.jb51.net/password/createmd5password
在线散列/哈希算法加密工具:
在线md5/hash/sha-1/sha-2/sha-256/sha-512/sha-3/ripemd-160加密工具:
在线sha1/sha224/sha256/sha384/sha512加密工具:
更多关于php相关内容感兴趣的读者可查看本站专题:《php加密方法总结》、《php编码与转码操作技巧汇总》、《php数学运算技巧总结》、《php数组(array)操作技巧大全》、《php字符串(string)用法总结》、《php数据结构与算法教程》、《php程序设计算法总结》及《php正则表达式用法总结》
希望本文所述对大家php程序设计有所帮助。
上一篇: 女人体味重怎么办?如何缓解压力带来的体味