PHP使用3DES加密代码,于JAVA和C#的3DES互通
因为一个支付接口,使用了PHP的3des加密方式,相对des更强壮,但是刚开始写的时候问题比较多,PHP中3DES加密的结果在JAVA和C#中解密不了,最后研究完了,把代码分享出来。
代码有点乱,自己整理,实用为主!
echo pdex_sign('abc');
function pdex_sign($codestr){
function pkcs5_pad($text, $blocksize)
{
$pad = $blocksize - (strlen($text) % $blocksize);
return $text . str_repeat(chr($pad), $pad);
}
function pkcs5_unpad($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);
}
$key = "96781E7B8D5A0E8A5CE7A95317394407"; //关键:加密key
$iv = "wodepianyiliang"; //关键:偏移量
$iv = pack("H16", $iv);
$td = mcrypt_module_open(MCRYPT_3DES, '', MCRYPT_MODE_ECB, '');
mcrypt_generic_init($td, base64_encode($key), base64_encode($iv));
$str = base64_encode(mcrypt_generic($td,pkcs5_pad($codestr,8)));
return $str;
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
$td = mcrypt_module_open(MCRYPT_3DES, '', MCRYPT_MODE_ECB, '');
mcrypt_generic_init($td, $key, $iv);
$ttt = pkcs5_unpad(mdecrypt_generic($td, base64_decode($str)));
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
return $ttt;
}
abc这个字符串的3DES加密结果为:587/nwuFw9o=
通过第三方网站可以进行解密,做验证