php 3des zeropad填充,php:将mcrypt_encrypt转换为openssl_encrypt和OPENSSL_ZERO_PADDING问题

小编典典

如果不是块大小的倍数,则零填充输入数据。如果数据本身具有尾随零,则会导致结果不明确。显然,在这种情况下,OpenSSL不允许您使用零填充,这说明了错误的返回值。

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

$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

2020-05-29

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值