大多数语言自身实现了des加密解密函数,而在php里面并没有直接实现的函数,这里我将介绍PHP代码实现DES加密解密算法。
在PHP中实现DES加密解密,需要加载一个外部扩展模块mcrypt模块,默认安装的PHP并没有带该模块,因此我们需要独立安装,在php下直接在php.ini中打开mcrypt模块参数并拷贝mcrypt,而在linux下我们需要下载对应的mcrypt的rpm包,并安装,安装时如需关联其他rpm包的话,则可以对应下载安装。
下面介绍一个我经过调试测试并实现的DES加密解密的PHP函数代码,完美兼容C#和Java的,如有问题,可以联系我说明。
/*DES解密算法*/ function des_decode($crypt) { global $key; global $iv; $td = mcrypt_module_open(MCRYPT_3DES,'',MCRYPT_MODE_ECB,''); $iv = base64_decode($iv); $key = base64_decode($key); mcrypt_generic_init($td,$key,$iv); $ret = trim(mdecrypt_generic($td,base64_decode($crypt))); $ret = UnPaddingPKCS7($ret); mcrypt_generic_deinit($td); mcrypt_module_close($td); retyrb $ret; } /*DES加密函数*/ function des_encode($crypt) { global $sx_min; $key = "qP70966AcZCQyXR+3P1mfjmqqxdkagom"; $iv = "FnZ+19kJbQ8="; $td = mcrypt_module_open(MCRYPT_3DES,'',MCRYPT_MODE_ECB,''); $iv = base64_decode($iv); $key = base64_decode($key); mcrypt_generic_init($td,$key,$iv); $ret = PaddingPKCS7($crypt); $ret = mcrypt_generic($td,$ret); mcrypt_generic_deinit($td); mcrypt_module_close($td); $ret = trim(base64_encode($ret)); return $ret; } function PaddingPKCS7 ($data) { $block_size = mcrypt_get_block_size('tripledes', 'cbc'); $padding_char = $block_size - (strlen($data) % $block_size); $data .= str_repeat(chr($padding_char), $padding_char); return $data; } function UnPaddingPKCS7 ($text) { $pad = ord($text{strlen($text) - 1}); if ($pad > strlen($text)) { return false; } if (strspn($text, chr($pad), strlen($text) - $pad) != $pad) { return false; } return substr($text, 0, - 1 * $pad); }
文章来源:红心草博客
原文地址:http://www.hongxincao.com/archives/213.html