200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 3des java ecb_PHP 3DES加密 与JAVA通用 加密模式:ECB

3des java ecb_PHP 3DES加密 与JAVA通用 加密模式:ECB

时间:2023-08-25 13:29:36

相关推荐

3des java ecb_PHP 3DES加密 与JAVA通用 加密模式:ECB

昨天帮同事解决了一个接口加密的算法,同事是个小姑娘,不懂,所以老大派我协助她,所以我为了不在姑凉面前掉面子~~火速解决它...

甲方是电信,JAVA写的接口,我一听头就大了,大家都知道~~PHP在加密算法上 与JAVA不太一样,确切的说,PHP 3DES加密的填充方式使用0,而JAVA默认使用PKCS7填充,对方用的是PKCS5。

废话不多说了,上代码吧。

对方使用3DES,加密模式:ecb,填充方法:PKCS5

/**

*

* 加密函数

* 算法:des

* 加密模式:ecb

* 补齐方法:PKCS5

*

* @author 1336707969@

*/

function pkcs5_padding($text, $blocksize)

{

$pad = $blocksize - (strlen($text) % $blocksize);

return $text . str_repeat(chr($pad), $pad);

}

function pkcs5_unpadding($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 = "*****"; //这里说一下,对方使用24位密钥,如果要求36位,需要pack处理一下

$str = "abcdefg";

echo "明文为:".$str."

";

//加密方法

$m = MCRYPT_TRIPLEDES;

$iv = mcrypt_create_iv(mcrypt_get_iv_size($m,MCRYPT_MODE_ECB), MCRYPT_RAND);

$td = mcrypt_module_open(MCRYPT_3DES, '', MCRYPT_MODE_ECB, '');

mcrypt_generic_init($td, $key, $iv);

$str = base64_encode(mcrypt_generic($td,pkcs5_padding($str,8)));

echo "PHP加密后的密文为:".$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);

echo "解密后的明文为:".$ttt . "

";

echo "

";

?>

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。