AES加密解密的例子小结
2014-02-18 09:15
176 查看
话不多说,先放上代码,一共有两个文件:AES.php(aes算法类文件)和aesDemo.php(应用实例文件),这里只贴出aesDemo.php,其他的看附件吧!
aesDemo.php:
例子,
例子、AES加密类
例子、附一个可加密可解密类
你可能感兴趣的文章
Php Aes加密类程序代码分享
aesDemo.php:
例子,
代码如下 | 复制代码 |
<?php require_once('./AES.php'); //$aes = new AES(); $aes = new AES(true);// 把加密后的字符串按十六进制进行存储 //$aes = new AES(true,true);// 带有调试信息且加密字符串按十六进制存储 $key = "this is a 32 byte key";// 密钥 $keys = $aes->makeKey($key); $encode = "123456";// 被加密的字符串 $ct = $aes->encryptString($encode, $keys); echo "encode = ".$ct."<br>"; $cpt = $aes->decryptString($ct, $keys); echo "decode = ".$cpt; ?> |
代码如下 | 复制代码 |
<?php //php aes加密类 class AESMcrypt { public $iv = null; public $key = null; public $bit = 128; private $cipher; public function __construct($bit, $key, $iv, $mode) { if(empty($bit) || empty($key) || empty($iv) || empty($mode)) return NULL; $this->bit = $bit; $this->key = $key; $this->iv = $iv; $this->mode = $mode; switch($this->bit) { case 192:$this->cipher = MCRYPT_RIJNDAEL_192; break; case 256:$this->cipher = MCRYPT_RIJNDAEL_256; break; default: $this->cipher = MCRYPT_RIJNDAEL_128; } // www.111cn.net switch($this->mode) { case 'ecb':$this->mode = MCRYPT_MODE_ECB; break; case 'cfb':$this->mode = MCRYPT_MODE_CFB; break; case 'ofb':$this->mode = MCRYPT_MODE_OFB; break; case 'nofb':$this->mode = MCRYPT_MODE_NOFB; break; default: $this->mode = MCRYPT_MODE_CBC; } } public function encrypt($data) { $data = base64_encode(mcrypt_encrypt( $this->cipher, $this->key, $data, $this->mode, $this->iv)); return $data; } public function decrypt($data) { $data = mcrypt_decrypt( $this->cipher, $this->key, base64_decode($data), $this->mode, $this->iv); $data = rtrim(rtrim($data), ".."); return $data; } } //使用方法 $aes = new AESMcrypt($bit = 128, $key = 'abcdef1234567890', $iv = '0987654321fedcba', $mode = 'cbc'); $c = $aes->encrypt('haowei.me'); var_dump($aes->decrypt($c)); |
代码如下 | 复制代码 |
<?PHP /** * AES加密、解密类 * @author hushangming * * 用法: * <pre> * // 实例化类 * // 参数$_bit:格式,支持256、192、128,默认为128字节的 * // 参数$_type:加密/解密方式,支持cfb、cbc、nofb、ofb、stream、ecb,默认为ecb * // 参数$_key:密钥,默认为abcdefghijuklmno * $tcaes = new TCAES(); * $string = 'laohu'; * // 加密 * $encodeString = $tcaes->encode($string); * // 解密 * $decodeString = $tcaes->decode($encodeString); * </pre> */ class TCAES{ private $_bit = MCRYPT_RIJNDAEL_256; private $_type = MCRYPT_MODE_CBC; //private $_key = 'abcdefghijuklmno0123456789012345'; private $_key = 'abcdefghijuklmno'; // 密钥 private $_use_base64 = true; private $_iv_size = null; private $_iv = null; /** * @param string $_key 密钥 * @param int $_bit 默认使用128字节 * @param string $_type 加密解密方式 * @param boolean $_use_base64 默认使用base64二次加密 */ public function __construct($_key = '', $_bit = 128, $_type = 'ecb', $_use_base64 = true){ // 加密字节 if(192 === $_bit){ $this->_bit = MCRYPT_RIJNDAEL_192; }elseif(128 === $_bit){ $this->_bit = MCRYPT_RIJNDAEL_128; }else{ $this->_bit = MCRYPT_RIJNDAEL_256; } // 加密方法 if('cfb' === $_type){ $this->_type = MCRYPT_MODE_CFB; }elseif('cbc' === $_type){ $this->_type = MCRYPT_MODE_CBC; }elseif('nofb' === $_type){ $this->_type = MCRYPT_MODE_NOFB; }elseif('ofb' === $_type){ $this->_type = MCRYPT_MODE_OFB; }elseif('stream' === $_type){ $this->_type = MCRYPT_MODE_STREAM; }else{ $this->_type = MCRYPT_MODE_ECB; } // 密钥 if(!empty($_key)){ $this->_key = $_key; } // 是否使用base64 $this->_use_base64 = $_use_base64; $this->_iv_size = mcrypt_get_iv_size($this->_bit, $this->_type); $this->_iv = mcrypt_create_iv($this->_iv_size, MCRYPT_RAND); } /** * 加密 * @param string $string 待加密字符串 * @return string */ public function encode($string){ if(MCRYPT_MODE_ECB === $this->_type){ $encodeString = mcrypt_encrypt($this->_bit, $this->_key, $string, $this->_type); }else{ $encodeString = mcrypt_encrypt($this->_bit, $this->_key, $string, $this->_type, $this->_iv); } if($this->_use_base64) $encodeString = base64_encode($encodeString); return $encodeString; } /** * 解密 * @param string $string 待解密字符串 * @return string */ public function decode($string){ if($this->_use_base64) $string = base64_decode($string); $string = $this->toHexString($string); if(MCRYPT_MODE_ECB === $this->_type){ $decodeString = mcrypt_decrypt($this->_bit, $this->_key, $string, $this->_type); }else{ $decodeString = mcrypt_decrypt($this->_bit, $this->_key, $string, $this->_type, $this->_iv); } return $decodeString; } /** * 将$string转换成十六进制 * @param string $string * @return stream */ private function toHexString ($string){ $buf = ""; for ($i = 0; $i < strlen($string); $i++){ $val = dechex(ord($string{$i})); if(strlen($val)< 2) $val = "0".$val; $buf .= $val; } return $buf; } /** * 将十六进制流$string转换成字符串 * @param stream $string * @return string */ private function fromHexString($string){ $buf = ""; for($i = 0; $i < strlen($string); $i += 2){ $val = chr(hexdec(substr($string, $i, 2))); $buf .= $val; } return $buf; } } |
Php Aes加密类程序代码分享
相关文章推荐
- php中AES加密解密的例子小结
- php AES加密解密的例子
- GO语言JAVA语言实现的AES/CFB/256位的加密解密例子
- <转载>Java 加密解密之对称加密算法AES
- android加密,php解密 , AES,CBC, PKCS7Padding
- vs.2005 中对COOKIES 加密解密 例子
- Android AES 文件加密解密
- AES加密解密的数据和android的不一样效果?
- Asp.Net C#中除了MD5加密之外还经常用到了AES加密、解密与DES加密、解密,本次先介绍DES的加密及解密。注意的是DES的密匙是8位的。
- AES加密解密简单实例
- javascript实现AES加密解密(ECB&CBC)
- AES加密和解密
- java RSA和AES加密解密工具
- 使用Python实现AES加密解密
- windows中使用Python进行AES加密解密-加密解密功能实现
- 用AES来加密和解密文件
- AES加密解密——AES在JavaWeb项目中前台JS加密,后台Java解密的使用
- AES加密解密
- Swift-AES之加密解密