AES加密解密(使用php扩展mcrypt实现AES加密)
来源:互联网 发布:mysql frm hy000 编辑:程序博客网 时间:2024/05/22 09:00
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);
- 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
- )
以下是使用扩展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));
输出结果
问题,不知道是什么原因,解密后的字符串(见上图),末尾还留下有不可见的填充字符,当明文刚好可以分组时则没有。
0 0
- AES加密解密(使用php扩展mcrypt实现AES加密)
- 使用php扩展mcrypt实现AES加密
- 使用php扩展mcrypt实现AES加密
- PHP OpenSSL&Mcrypt实现AES加密
- PHP OpenSSL&Mcrypt实现AES加密
- php AES加密解密
- php aes 加密解密
- 利用mcrypt做AES加密解密
- PHP AES 加密 解密 实现实例
- 使用C#实现AES加密解密
- PHP的AES加密解密
- PHP AES加密解密学习
- PHP-AES加密解密算法
- AES/CryptoJS/PHP 加密解密
- PHP AES的加密解密
- 【加密解密】-AES加密解密实现
- 【加密解密】-AES加密解密实现
- AES加密解密代码实现
- 猫猫学IOS(一)UI之Hello World与加法计算器
- 网络状态监测之 Reachability的使用
- using the easy connect naming method 简单连接测试
- leetcode--19Remove Nth Node From End of List
- php学习随记4
- AES加密解密(使用php扩展mcrypt实现AES加密)
- oracle rac IO 隔离的存储SCSI锁原理
- 北大光华学院学生研究报告-关于超级表格创业
- POJ 1337 A Lazy Worker(DP)
- 3-6
- struts2学习笔记之十六(token标签)
- 单例设计模式 浅谈
- Oracle存储过程update受外键约束的主键值时完整性冲突解决方案
- HTML锚点&JSP锚点