使用php扩展mcrypt实现AES加密
来源:互联网 发布:2015年淘宝指数分析 编辑:程序博客网 时间:2024/06/05 22:51
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)其中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扩展mcrypt实现AES加密
- AES加密解密(使用php扩展mcrypt实现AES加密)
- PHP OpenSSL&Mcrypt实现AES加密
- PHP OpenSSL&Mcrypt实现AES加密
- PHP 加密扩展 mcrypt 的基本使用
- PHP mcrypt加密扩展使用总结
- PHP mcrypt加密扩展使用总结
- php 加密 Mcrypt扩展库
- 为php使用des加密安装mcrypt扩展
- liunx下安装 mcrypt 扩展,php代码加密扩展
- 使用php缺少加密扩展mcrypt等相关问题的一些解决方法
- PHP使用mcrypt进行AES加密后的数据NodeJS等无法解密的问题修复方案
- PHP的加密函数库Mcrypt使用介绍
- PHP的加密函数库Mcrypt使用介绍
- 安装和使用php的mcrypt扩展
- PHP加密扩展库Mcrypt安装及应用技巧
- PHP加密扩展库Mcrypt安装和实例
- 硅谷创业者中被遮蔽的“中国现象”
- 外观模式
- DropDownList添加节点
- CListBox的糊涂使用
- 详细解说STL hash_map系列
- 使用php扩展mcrypt实现AES加密
- oracle中通过系统表cols查询表存在或表中某字段存在方法
- ORA_04050错误的一种原因.
- Java I/O中的对象序列化
- Java I/O中的对象序列化
- TRIE树
- PHP中的序列化问题
- UNIX实际用户ID和有效用户ID
- bash 脚本实现的配置文件(ini/inc.sh)的读写操作