之前寫過一個加解密的文章,也能湊合著使用, 現在為了安全, 用php寫了一個triple des(3DES)的正反加解密函數. 3DES是公認的最安全的加密解密函數了,只是可惜的是php沒有提供這樣現成的函數,於是乎自己寫了一個3DES版本的方法,3DES有很多版本,該版本采用的是ECB模式,用PKCS7補碼,base64做密文,安全等級高,一般使用該函數只要修改其中的key即可.
測試:
echo (des3crypt( “龍哥博客”,’ENCODE’));
echo “
“;
echo (des3crypt( “bxC46TETFEZFpTS1DClzpg==”,’DECODE’));
echo “
“;
/**
* 加解密函數
* @param $str
* @param $type
* @param $key
*/
function des3crypt($str,$type = ‘ENCODE’,$key = ‘AXNU7SLKJ7HKJm+x4bfBJSJQKde’){
if(empty($str) && $str != 0){
return false;
}
$td = mcrypt_module_open( MCRYPT_3DES, ”, MCRYPT_MODE_ECB, ”);
$key = base64_decode($key);
mcrypt_generic_init($td, $key,’12345678′);
if(strtoupper($type) == ‘ENCODE’){
$str = padding( $str );
$data = mcrypt_generic($td, $str);
}elseif(strtoupper($type) == ‘DECODE’){
$str = base64_decode($str);
$data = mdecrypt_generic($td, $str);
}
//加密
mcrypt_generic_deinit($td);
//結束
mcrypt_module_close($td);
if(strtoupper($type) == ‘ENCODE’){
$data = removeBR(base64_encode($data));
}elseif(strtoupper($type) == ‘DECODE’){
$data = removePadding($data);
}
return $data;
}
//刪除填充符
function removePadding( $str ){
$len = strlen( $str );
$newstr = “”;
$str = str_split($str);
for ($i = 0; $i < $len; $i++ ){
if (!in_array($str[$i],array(chr(0),chr(1),chr(2),chr(3),chr(4),chr(5),chr(6),chr(7),chr(8)))){
$newstr .= $str[$i];
}
}
return $newstr;
}
//填充密碼,填充至8的倍數,pkcs7 | pkcs5
function padding( $str ,$pkcs = 5){
if($pkcs == 5){
$pad = 8 – (strlen($str) % 8);
$str .= str_repeat(chr($pad), $pad);
}elseif($pkcs == 7){
$len = 8 – strlen( $str ) % 8;
for ( $i = 0; $i < $len; $i++ ){
$str .= chr( 0 );
}
}
return $str ;
}
/**
* http://52blogger.com 龍哥博客版權所有,歡迎轉載,轉載請務必注明來源,違版必究.
*/
//刪除回車和換行
function removeBR( $str ){
$len = strlen( $str );
$newstr = “”;
$str = str_split($str);
for ($i = 0; $i < $len; $i++ ){
if ($str[$i] != ‘\n’ and $str[$i] != ‘\r’){
$newstr .= $str[$i];
}
}
return $newstr;
}
文章來源:龍哥博客 原文:http://www.52blogger.com/archives/821