之前写过一个加解密的文章,也能凑合着使用,现在为了安全,用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] != ‘’ and $str[$i] != ‘’){ $newstr .= $str[$i]; } } return $newstr; } 文章来源:龙哥博客 原文:http://www.52blogger.com/archives/821 (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|