mcrypt encrypt java_php:mcrypt_encrypt到openssl_encrypt,以及OPENSSL_ZERO_PADDING问题

mcrypt_encrypt零填充输入数据,如果's not a multiple of the blocksize. This leads to ambiguous results if the data itself has trailing zeroes. Apparently OpenSSL doesn'允许您在这种情况下使用零填充,这解释了错误的返回值 .

您可以通过手动添加填充来避免这种情况 .

$message = "Lorem ipsum";

$key = "123456789012345678901234";

$iv = "12345678";

$message_padded = $message;

if (strlen($message_padded) % 8) {

$message_padded = str_pad($message_padded,

strlen($message_padded) + 8 - strlen($message_padded) % 8, "\0");

}

$encrypted_mcrypt = mcrypt_encrypt(MCRYPT_3DES, $key,

$message, MCRYPT_MODE_CBC, $iv);

$encrypted_openssl = openssl_encrypt($message_padded, "DES-EDE3-CBC",

$key, OPENSSL_RAW_DATA | OPENSSL_NO_PADDING, $iv);

printf("%s => %s\n", bin2hex($message), bin2hex($encrypted_mcrypt));

printf("%s => %s\n", bin2hex($message_padded), bin2hex($encrypted_openssl));

这两者打印相同 .

4c6f72656d20697073756d => c6fed0af15d494e485af3597ad628cec

4c6f72656d20697073756d0000000000 => c6fed0af15d494e485af3597ad628cec

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值