PHP 基於Mcrypt 的加密解密簡單類
最近的一個項目項目中需要對Cookie 加密,所以使用到了Mcrypt 的方法進行加密解密的工作,於是我就整理成一個簡單的類,以後直接簡單調用類實現即可。
Mcrypt 介紹
Mcrypt 是PHP 的一個擴展,完成了常用加密算法的封裝,mcrypt 庫提供了對多種塊算法的支持, 包括:DES,TripleDES,Blowfish (默認), 3-WAY,SAFER-SK64,SAFER-SK128, TWOFISH,TEA,RC2 以及GOST,並且支持CBC,OFB,CFB 和ECB 密碼模式。甚至它還支持諸如RC6 和IDEA 這兩種“非免費”的算法。
可以使用mcrypt_list_modes()
函數列出當前環境支持的模式,以及使用mcrypt_list_algorithms()
列出當前環境支持的算法。
簡單的Mcrypt 的加密解密類
下面?創建一個簡單的類,默認使用RIJNDAEL_256 算法和ECB 模式,?當然也可以傳遞?其他的算法和模式進去。
Class WPJAM_Mcrypt{
private $key;
private $algorithm = MCRYPT_RIJNDAEL_256;
private $algorithm_directory = '';
private $mode = MCRYPT_MODE_ECB;
private $mode_directory = '';
public function __construct($key, $args=array()){
$this->key = $key;
$this->algorithm = isset($args['$algorithm'])?$args['$algorithm']:$this->algorithm;
$this->algorithm_directory = isset($args['$algorithm_directory'])?$args['$algorithm_directory']:$this->algorithm_directory;
$this->mode = isset($args['$mode'])?$args['$mode']:$this->mode;
$this->mode_directory = isset($args['$mode_directory'])?$args['$mode_directory']:$this->mode_directory;
}
public function encrypt($text){
$module = mcrypt_module_open($this->algorithm, $this->algorithm_directory, $this->mode, $this->mode_directory);
$iv_size = mcrypt_enc_get_iv_size($module);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
mcrypt_generic_init($module, $this->key, $iv);
$encrypted_text = mcrypt_generic($module, $text);
mcrypt_generic_deinit($module);
mcrypt_module_close($module);
return trim(base64_encode($encrypted_text));
}
public function decrypt($encrypted_text){
$encrypted_text = base64_decode($encrypted_text);
$module = mcrypt_module_open($this->algorithm, $this->algorithm_directory, $this->mode, $this->mode_directory);
$iv_size = mcrypt_enc_get_iv_size($module);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
mcrypt_generic_init($module, $this->key, $iv);
$decrypted_text = mdecrypt_generic($module, $encrypted_text);
return trim($decrypted_text);
}
}
使用方法非常簡單:
//首先创建类
$wpjam_mcrypt = new WPJAM_Mcrypt('t12d3uBDDVy9eC836r76VKlBvtEFzizz');
$plain_text = '要加密的文字';
$encrypted_text = $wpjam_mcrypt->encrypt($plgin_text); // 加密
$decrypted_text = $wpjam_mcrypt->decrypted($encrypted_text); // 解密