| <?php | 
| /** | 
|  * PhalApi_Crypt_MultiMcrypt 多级mcrypt加密 | 
|  * 对底层的mcrypt进行简单的再封装,以便存储和保留类型 | 
|  * | 
|  * - 依赖PhalApi_Crypt_Mcrypt进行加解密操作 | 
|  * - 支持任何数据类型的加解密 | 
|  * - 返回便于存储的字符串 | 
|  * | 
|  * @package     PhalApi\Crypt | 
|  * @license     http://www.phalapi.net/license GPL 协议 | 
|  * @link        http://www.phalapi.net/ | 
|  * @author      dogstar <chanzonghuang@gmail.com> 2014-12-11 | 
|  */ | 
|   | 
| class PhalApi_Crypt_MultiMcrypt implements PhalApi_Crypt { | 
|   | 
|     /** | 
|      * @var PhalApi_Crypt_Mcrypt $mcrypt | 
|      */ | 
|     protected $mcrypt = NULL; | 
|   | 
|     public function __construct($iv) { | 
|         $this->mcrypt = new PhalApi_Crypt_Mcrypt($iv); | 
|     } | 
|   | 
|     /** | 
|      * @param mixed $data 待加密的数据 | 
|      */ | 
|     public function encrypt($data, $key) { | 
|         $encryptData = serialize($data); | 
|   | 
|         $encryptData = $this->mcrypt->encrypt($encryptData, $key); | 
|   | 
|         $encryptData = base64_encode($encryptData); | 
|   | 
|         return $encryptData; | 
|     } | 
|   | 
|     /** | 
|      * 忽略不能正常反序列化的操作,并且在不能预期解密的情况下返回原文 | 
|      */ | 
|     public function decrypt($data, $key) { | 
|         $decryptData = base64_decode($data); | 
|   | 
|         if ($decryptData === FALSE || $decryptData === '') { | 
|             return $data; | 
|         } | 
|   | 
|         $decryptData = $this->mcrypt->decrypt($decryptData, $key); | 
|   | 
|         $decryptData = @unserialize($decryptData); | 
|         if ($decryptData === FALSE) { | 
|             return $data; | 
|         } | 
|   | 
|         return $decryptData; | 
|     } | 
| } |