PHP程序员们在编写代码程序时,除了要保证代码的高性能之外,还有一点是非常重要的,那就是程序的安全性保障。PHP除了自带的几种加密函数外,还有功能更全面的PHP加密扩展库Mcrypt和Mhash。
其中,Mcrypt扩展库可以实现加密解密功能,就是既能将明文加密,也可以密文还原。
封装加密类代码
/**
* 加密类
*/
class Security
{
private static $_instance;
private function __construct() {}
private function __clone() {}
private $_secret_key = 'key'; //加密密钥 可自定义设置 防止泄露
/**
* 单例模式
*/
public static function getInstance()
{
if (!(self::$_instance instanceof self)) {
self::$_instance = new self;
}
return self::$_instance;
}
/**
* 加密工具函数
*/
private function encode1($data)
{
$td = mcrypt_module_open(MCRYPT_RIJNDAEL_256, '', MCRYPT_MODE_CBC, '');
$iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
$this->_secret_key = 'swtrademark_key';
mcrypt_generic_init($td, $this->_secret_key, $iv);
$encrypted = mcrypt_generic($td, $data);
mcrypt_generic_deinit($td);
return $iv . $encrypted;
}
/**
* 解密工具函数
*/
private function decode1($data)
{
$td = mcrypt_module_open(MCRYPT_RIJNDAEL_256, '', MCRYPT_MODE_CBC, '');
$iv = mb_substr($data, 0, 32, 'latin1');
$this->_secret_key = 'swtrademark_key';
mcrypt_generic_init($td, $this->_secret_key, $iv);
$data = mb_substr($data, 32, mb_strlen($data, 'latin1'), 'latin1');
$data = mdecrypt_generic($td, $data);
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
return trim($data);
}
/**
* 替换
*/
private function replace($str)
{
$str1 = str_replace('/', '*', $str);
$str2 = str_replace('=', '^', $str1);
return str_replace('+', '_', $str2);
}
/**
* 反替换
*/
private function base64replace($str)
{
$str1 = str_replace('*', '/', $str);
$str2 = str_replace('^', '=', $str1);
return str_replace('_', '+', $str2);
}
/**
* 加密调用函数
*/
public function word_encode($keyWord)
{
$str = $this->encode1($keyWord);
return trim($this->replace(base64_encode($str)));
}
/**
* 解密调用函数
*/
public function word_decode($keyWord)
{
$str = base64_decode($this->base64replace($keyWord));
return trim($this->decode1($str));
}
}
/**
* 调用
*/
$str = '这是个秘密';
//加密
$password = Security::getInstance()->word_encode( $str );
echo $password . '
';
//解密
echo Security::getInstance()->word_decode( $password );
//结果: (加密密码为动态的,实时变化,两次运行结果如下)
/**
* bUxwS2u24waVyrXtMu*vKgsPGWVnjzrFD1na8krUAxZOJuAm7qMO4S_o4MogWL1G82OYhCUjt_uW8phmU_niww^^
* 这是个秘密
*/
/**
* 2A_GIJvNHQ9J9NPpKu6x2wehP4ondYQeU1QJQNKj1Bd9NCDPZz0QbENIXE5_pgbespM5qS78Dj2cfSibgL3vWQ^^
* 这是个秘密
*/