文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
10.1.2 AES 加密
AES(Advanced Encryption Standard)加密在密码学中又称 Rijndael 加密法,比 3DES 更加安全,密钥长度的最少支持为 128、192、256 位,所以逐渐替代原先的 DES。
PHP 中需要在 php.ini 中打开 php_mcrypt.dll 库的引用,设置方法我们已在上一小节介绍过,我们来看一个 PHP 中 AES 的加解密实例:
<?php class Aes{ public $_secrect_key='' ; // 密钥 function Aes ( $key ) { $this->_secrect_key = $key ; } /** * 加密方法 * @param string $str * @return string */ function encrypt ( $str ) { //AES , 128 ECB 模式加密数据 $screct_key = $this->_secrect_key ; $screct_key = base64_decode ( $screct_key ); $str = trim ( $str ); $str = $this->addPKCS7Padding ( $str ); $iv = mcrypt_create_iv ( mcrypt_get_iv_size ( MCRYPT_RIJNDAEL_128 , MCRYPT_MODE_ECB ), MCRYPT_RAND ); $encrypt_str = mcrypt_encrypt ( MCRYPT_RIJNDAEL_128 , $screct_key , $str , MCRYPT_MODE_ECB , $iv ); return base64_encode ( $encrypt_str ); } /** * 解密方法 * @param string $str * @return string */ function decrypt ( $str ) { //AES , 128 ECB 模式加密数据 $screct_key = $this->_secrect_key ; $str = base64_decode ( $str ); $screct_key = base64_decode ( $screct_key ); $iv = mcrypt_create_iv ( mcrypt_get_iv_size ( MCRYPT_RIJNDAEL_128 , MCRYPT_MODE_ECB ), MCRYPT_RAND ); $encrypt_str = mcrypt_decrypt ( MCRYPT_RIJNDAEL_128 , $screct_key , $str , MCRYPT_MODE_ECB , $iv ); $encrypt_str = trim ( $encrypt_str ); $encrypt_str = $this->stripPKSC7Padding ( $encrypt_str ); return $encrypt_str ; } /** * 填充算法 * @param string $source * @return string */ function addPKCS7Padding ( $source ) { $source = trim ( $source ); $block = mcrypt_get_block_size ( 'rijndael-128' , 'ecb' ); $pad = $block - ( strlen ( $source ) % $block ); if ( $pad <= $block ) { $char = chr ( $pad ); $source .= str_repeat ( $char , $pad ); } return $source ; } /** * 移去填充算法 * @param string $source * @return string */ function stripPKSC7Padding ( $source ) { $source = trim ( $source ); $char = substr ( $source , -1 ); $num = ord ( $char ); if ( $num==62 ) return $source ; $source = substr ( $source , 0 , -$num ); return $source ; } }
这个加密类使用起来也相当简单:
$rep=new Aes ( 'xxxx' ); $input="hello aes" ; echo " 原文: ".$input."<br/>" ; $encrypt_card=$rep->encrypt ( $input ); echo " 加密: ".$encrypt_card."<br/>" ; echo " 解密: ".$rep->decrypt ( $rep->encrypt ( $input ));
我们来看看使用它加解密后的效果,如图 10-3 所示。
图 10-3
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论