当前位置:首页 > PHP教程 > php应用 > 列表

php写的AES加密解密类分享

发布:smiling 来源: PHP粉丝网  添加日期:2021-02-28 16:05:20 浏览: 评论:0 

这篇文章主要介绍了php写的AES加密解密类,实际是为YII框架写的,不在YII框架时只需替换其中的两句代码即可使用,需要的朋友可以参考下,今天写了一个php的AES加密类。适用于Yii的扩展。

如果不用在Yii框架中,把代码中Yii::app()->params['encryptKey'] 换成你对应的默认key就可以了。

类代码:

  1. <?php 
  2. /** 
  3.  * php AES加解密类 
  4.  * 如果要与java共用,则密钥长度应该为16位长度 
  5.  * 因为java只支持128位加密,所以php也用128位加密,可以与java互转。 
  6.  * 同时AES的标准也是128位。只是RIJNDAEL算法可以支持128,192和256位加密。 
  7.  * java 要使用AES/CBC/NoPadding标准来加解密 
  8.  *  
  9.  * @author Terry 
  10.  * 
  11.  */ 
  12. class PhpAes 
  13.     /** 
  14.      * This was AES-128 / CBC / NoPadding encrypted. 
  15.      * return base64_encode string 
  16.      * @author Terry 
  17.      * @param string $plaintext 
  18.      * @param string $key 
  19.      */ 
  20.     public static function AesEncrypt($plaintext,$key = null) 
  21.     { 
  22.         $plaintext = trim($plaintext); 
  23.         if ($plaintext == ''return ''
  24.         if(!extension_loaded('mcrypt')) 
  25.             throw new CException(Yii::t('yii','AesEncrypt requires PHP mcrypt extension to be loaded in order to use data encryption feature.')); 
  26.         $size = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC); 
  27.         $module = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, ''); 
  28.         $key=self::substr($key===null ? Yii::app()->params['encryptKey'] : $key, 0, mcrypt_enc_get_key_size($module)); 
  29.         /* Create the IV and determine the keysize length, use MCRYPT_RAND 
  30.          * on Windows instead */ 
  31.         $iv = substr(md5($key),0,mcrypt_enc_get_iv_size($module)); 
  32.         /* Intialize encryption */ 
  33.         mcrypt_generic_init($module$key$iv); 
  34.  
  35.         /* Encrypt data */ 
  36.         $encrypted = mcrypt_generic($module$plaintext); 
  37.  
  38.         /* Terminate encryption handler */ 
  39.         mcrypt_generic_deinit($module); 
  40.         mcrypt_module_close($module); 
  41.         return base64_encode($encrypted); 
  42.     } 
  43.  
  44.     /** 
  45.      * This was AES-128 / CBC / NoPadding decrypted. 
  46.      * @author Terry 
  47.      * @param string $encrypted     base64_encode encrypted string 
  48.      * @param string $key 
  49.      * @throws CException 
  50.      * @return string 
  51.      */ 
  52.     public static function AesDecrypt($encrypted$key = null) 
  53.     { 
  54.         if ($encrypted == ''return ''
  55.         if(!extension_loaded('mcrypt')) 
  56.             throw new CException(Yii::t('yii','AesDecrypt requires PHP mcrypt extension to be loaded in order to use data encryption feature.')); 
  57.  
  58.         $ciphertext_dec = base64_decode($encrypted); 
  59.         $module = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, ''); 
  60.         $key=self::substr($key===null ? Yii::app()->params['encryptKey'] : $key, 0, mcrypt_enc_get_key_size($module)); 
  61.  
  62.         $iv = substr(md5($key),0,mcrypt_enc_get_iv_size($module)); 
  63.  
  64.         /* Initialize encryption module for decryption */ 
  65.         mcrypt_generic_init($module$key$iv); 
  66.  
  67.         /* Decrypt encrypted string */ 
  68.         $decrypted = mdecrypt_generic($module$ciphertext_dec); 
  69.  
  70.         /* Terminate decryption handle and close module */ 
  71.         mcrypt_generic_deinit($module); 
  72.         mcrypt_module_close($module); 
  73.         return rtrim($decrypted,"\0"); 
  74.     } 
  75.  
  76.     /** 
  77.      * Returns the length of the given string. 
  78.      * If available uses the multibyte string function mb_strlen. 
  79.      * @param string $string the string being measured for length 
  80.      * @return integer the length of the string 
  81.      */ 
  82.     private static function strlen($string
  83.     { 
  84.         return extension_loaded('mbstring') ? mb_strlen($string,'8bit') : strlen($string); 
  85.     } 
  86.  
  87.     /** 
  88.      * Returns the portion of string specified by the start and length parameters. 
  89.      * If available uses the multibyte string function mb_substr 
  90.      * @param string $string the input string. Must be one character or longer. 
  91.      * @param integer $start the starting position 
  92.      * @param integer $length the desired portion length 
  93.      * @return string the extracted part of string, or FALSE on failure or an empty string. 
  94.      */ 
  95.     private static function substr($string,$start,$length
  96.     { 
  97.         return extension_loaded('mbstring') ? mb_substr($string,$start,$length,'8bit') : substr($string,$start,$length); 
  98.     } 

Tags: AES加密解密

分享到: