直接上代码
<?php class AES { protected $cipher = MCRYPT_RIJNDAEL_128; //根据需要选择 protected $mode = MCRYPT_MODE_CBC; //根据需要选择 protected $pad_method = NULL; protected $secret_key = 'AadfAenfDIEldfja'; protected $iv = '1238389483762837'; public function set_cipher($cipher) { $this->cipher = $cipher; } public function set_mode($mode) { $this->mode = $mode; } public function set_iv($iv) { $this->iv = $iv; } public function set_key($key) { $this->secret_key = $key; } public function require_pkcs5() { $this->pad_method = 'pkcs5'; } protected function pad_or_unpad($str, $ext) { if ( is_null($this->pad_method) ) { return $str; } else { $func_name = __CLASS__ . '::' . $this->pad_method . '_' . $ext . 'pad'; if ( is_callable($func_name) ) { $size = mcrypt_get_block_size($this->cipher, $this->mode); return call_user_func($func_name, $str, $size); } } return $str; } protected function pad($str) { return $this->pad_or_unpad($str, ''); } protected function unpad($str) { return $this->pad_or_unpad($str, 'un'); } public function encrypt($str) { $str = $this->pad($str); $td = mcrypt_module_open($this->cipher, '', $this->mode, ''); if ( empty($this->iv) ) { $iv = @mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND); } else { $iv = $this->iv; } mcrypt_generic_init($td, $this->secret_key, $iv); $cyper_text = mcrypt_generic($td, $str); //$rt=base64_encode($cyper_text); $rt = bin2hex($cyper_text); mcrypt_generic_deinit($td); mcrypt_module_close($td); return $rt; } public function decrypt($str){ $td = mcrypt_module_open($this->cipher, '', $this->mode, ''); if ( empty($this->iv) ) { $iv = @mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND); } else { $iv = $this->iv; } mcrypt_generic_init($td, $this->secret_key, $iv); //$decrypted_text = mdecrypt_generic($td, self::hex2bin($str)); //$decrypted_text = mdecrypt_generic($td, base64_decode($str)); $str = pack("H*", $str); $decrypted_text = mdecrypt_generic($td, $str); $rt = $decrypted_text; mcrypt_generic_deinit($td); mcrypt_module_close($td); return $this->unpad($rt); } public static function hex2bin($hexdata) { $bindata = ''; $length = strlen($hexdata); for ($i=0; $i < $length; $i += 2) { $bindata .= chr(hexdec(substr($hexdata, $i, 2))); } return $bindata; } public static function pkcs5_pad($text, $blocksize) { $pad = $blocksize - (strlen($text) % $blocksize); return $text . str_repeat(chr($pad), $pad); } public static function pkcs5_unpad($text) { $pad = ord($text{strlen($text) - 1}); if ($pad > strlen($text)) return false; if (strspn($text, chr($pad), strlen($text) - $pad) != $pad) return false; return substr($text, 0, -1 * $pad); } } $plainText = '12345678'; $aes = new AES(); $aes->require_pkcs5(); $encText = $aes->encrypt($plainText); $decString = $aes->decrypt($encText); echo $encText."\n".$decString."\n";
相关推荐
AES算法介绍,AES算法介绍,AES算法介绍,AES算法介绍,AES算法介绍
摘自btstack,可在8051,MSP430上运行的AES128,加密解密算法。所耗资源极少,在16MHz 8051上运行<50ms.
一种AES算法的优化方法研究.doc
AES算法C++实现AES算法C++实现AES算法C++实现AES算法C++实现
AES详细例子 加密AES算法举例详细 加密AES算法举例详细
AES算法是非常重要的密码学算法。本文档主要实现了AES算法及其调用方法
Aes算法程序 Aes算法程序Aes算法程序 Aes算法程序Aes算法程序Aes算法程序
AES算法的verilog语言实现,已分成好模块,不同模块有不同的代码
AES算法C源码 AES算法C源码 AES算法C源码
基于python实现的AES算法和其五种工作模式
AES算法Java实现 有简单界面 使用彭长根老师的现代密码学趣味之旅
AES高级加密标准,在密码学中又称Rijndael加密法,是美国联邦政府采用的一种...本软件是用java语言开发,实现了AES算法对文件的加密和解密,并在界面上加了进度条,来提示用户加密解密的进度。如果不足之处,欢迎留言。
这是一个完美版aes算法实现
收集的几篇有关AES算法的文章 随着计算机和通信技术的发展, 用户对信息 的安全存储、安全处理和安全传输的需求越 来越迫切,随着攻击手段的日益提高和计算 机计算速度的增长,原有的DES密码体制由于 密钥长度太短...
实现AES算法 实现AES算法 实现AES算法 实现AES算法
QT 实现AES 加密算法
完成AES算法的加密完成AES算法的加密完成AES算法的加密
AES加密算法,AES的全称是Advanced Encryption Standard,意思是高级加密标准。它的出现主要是为了取代DES加密算法的,因为我们都知道DES算法的密钥长度是56Bit,因此算法的理论安全强度是2的56次方。 AES密码与...
AES算法C++源码,aes算法c(c++)_支持128、192和256位密钥
aes html 加解密插件与js工具 AES算法实现Java和JS互通加解密AES算法实现Java和JS互通加解密