<?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;
|
}
|
}
|