php des加密:php
$cipher_list = mcrypt_list_algorithms();//mcrypt支持的加密算法列表 $mode_list = mcrypt_list_modes();//mcrypt支持的加密模式列表 // print_r($cipher_list); // print_r($mode_list); function encrypt($key,$data){ $td = mcrypt_module_open("des", "", "ecb", "");//使用MCRYPT_DES算法,ecb模式 $size = mcrypt_enc_get_iv_size($td); //設置初始向量的大小 $iv = mcrypt_create_iv($size,MCRYPT_RAND); //建立初始向量 $key_size = mcrypt_enc_get_key_size($td); //返回所支持的最大的密鑰長度(以字節計算) $salt = ''; $subkey = substr(md5(md5($key).$salt), 0,$key_size);//對key複雜處理,並設置長度 mcrypt_generic_init($td, $subkey, $iv); $endata = mcrypt_generic($td, $data); mcrypt_generic_deinit($td); mcrypt_module_close($td); return $endata; } function decrypt($key,$endata){ $td = mcrypt_module_open("des", "", "ecb", "");//使用MCRYPT_DES算法,ecb模式 $size = mcrypt_enc_get_iv_size($td); //設置初始向量的大小 $iv = mcrypt_create_iv($size,MCRYPT_RAND); //建立初始向量 $key_size = mcrypt_enc_get_key_size($td); //返回所支持的最大的密鑰長度(以字節計算) $salt = ''; $subkey = substr(md5(md5($key).$salt), 0,$key_size);//對key複雜處理,並設置長度 mcrypt_generic_init($td, $subkey, $iv); $data = rtrim(mdecrypt_generic($td, $endata)).'\n'; mcrypt_generic_deinit($td); mcrypt_module_close($td); return $data; } $key = "www.tencent.com"; // $data = "返回所支持的最大的密鑰長度(涉及到發件費啦"; $data = "dadfafdafd,我是一個好孩子"; $endata = encrypt($key,$data); $data1 = decrypt($key,$endata); echo $endata; //直接輸出,在網頁上是亂碼,用base64_encode處理,就變成由字符、數組、加號、斜槓等共64種字符註冊 echo base64_encode($endata); echo $data1;
php全部的加密算法和模型:html
//rijndael-128,rijndael-192,rijndael-256就是AES加密,3種分別是使用不一樣的數據塊和密鑰長度進行加密。
Array ( [0] => cast-128 [1] => gost [2] => rijndael-128 [3] => twofish [4] => arcfour [5] => cast-256 [6] => loki97 [7] => rijndael-192 [8] => saferplus [9] => wake [10] => blowfish-compat [11] => des [12] => rijndael-256 [13] => serpent [14] => xtea [15] => blowfish [16] => enigma [17] => rc2 [18] => tripledes ) Array ( [0] => cbc [1] => cfb [2] => ctr [3] => ecb [4] => ncfb [5] => nofb [6] => ofb [7] => stream )
通常狀況,用上面代碼塊便可,若是要求本身搞一個類,可使用下面的類便可:算法
<?php
/*
* 類中,功能部分功能沒有提煉,還需進一步修改
*/ class Mymcrypt { public $key = "www.tence.com"; //必須是字符串了,若是是數字 // 加密 public function do_mencrypt($input) { // $key = substr(md5($this->key), 0, 24); // $td = mcrypt_module_open('des', '', 'ecb', ''); // $td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_ECB, ''); $td = mcrypt_module_open(MCRYPT_RIJNDAEL_256, '', MCRYPT_MODE_ECB, ''); $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND); //沒有作key size設定 $key_size = mcrypt_enc_get_key_size($td); //返回所支持的最大的密鑰長度(以字節計算) $salt = ''; $subkey = substr(md5(md5($this->key).$salt), 0,$key_size);//對key複雜處理,並設置長度 mcrypt_generic_init($td, $subkey, $iv); $encrypted_data = mcrypt_generic($td, $input); mcrypt_generic_deinit($td); mcrypt_module_close($td); // return trim(chop($this->base64url_encode($encrypted_data))); return $encrypted_data; } // 解密 //$input - stuff to decrypt public function do_mdecrypt($input) { // $key = substr(md5($this->key), 0, 24); // $td = mcrypt_module_open('des', '', 'ecb', ''); // $td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_ECB, ''); $td = mcrypt_module_open(MCRYPT_RIJNDAEL_256, '', MCRYPT_MODE_ECB, ''); $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND); //沒有作key size設定 $key_size = mcrypt_enc_get_key_size($td); //返回支持的最大的密鑰長度(以字節計)也可本身設定好比24 $salt = ''; $subkey = substr(md5(md5($this->key).$salt), 0,$key_size);////對key複雜處理,並設置長度 mcrypt_generic_init($td, $subkey, $iv); $decrypted_data = mdecrypt_generic($td, $input); mcrypt_generic_deinit($td); mcrypt_module_close($td); // return trim(chop($decrypted_data)); return $decrypted_data; } // base64在url傳遞過程當中須要注意的 // 把base64加密後在url傳輸,會把「+「,」/」分別替換爲」-」,」_」,以及會把末尾的等號「=」去掉。 // 另外base64加密後的長度必然是4的倍數,因此能夠根據這個還原「=」號 function base64url_encode($data) { return rtrim(strtr(base64_encode($data), '+/', '-_'), '='); // return $data; //不處理會亂碼 // return base64_encode($data); } function base64url_decode($data) { return base64_decode(str_pad(strtr($data, '-_', '+/'), strlen($data) % 4, '=', STR_PAD_RIGHT)); } } // 用法 $myMcrypt = new Mymcrypt(); $data = 'PD867H4V9J6B'; $value = $myMcrypt->do_mencrypt($data); // $value = $myMcrypt->base64url_encode($value); //可使用特殊處理過的base64_encode $value = base64_encode($value); //方便在網頁顯示 $value = trim($value); //有時後面會帶不少預約於字符串 echo "$value <br/> 長度:".strlen($value)."<br/>"; $value = base64_decode($value); //解碼後解密 $value = $myMcrypt->do_mdecrypt($value); $value = trim($value); echo "$value <br/>長度:".strlen($value)."<br/>";
相關連接:segmentfault
https://segmentfault.com/a/1190000000668272 //php常見加密函數,總結的蠻好數組
http://www.cnblogs.com/hongfei/archive/2012/06/19/2555504.html //前半部分對概念的解釋很好函數
http://blog.csdn.net/zhang_red/article/details/39890539 //實際採用的例子this
http://blog.csdn.net/tsxw24/article/details/7644244 //簡潔版例子加密