【问题标题】:Triple des decryption function not working三重des解密功能不起作用
【发布时间】:2017-04-21 10:43:45
【问题描述】:

所以我一直在处理这个函数,但我不确定出了什么问题。

我得到加密的数据和密钥:

$key = 'aaaaaaaabbbbbbbbccccccccdddddddd';
$data = 'b5057bbc04b842a96144a0f617f2820e';

我已经将它们转换成二进制:

$key = pack('H*',$key);
$data = pack('H*',$data);

并运行解密函数:

echo bin2hex(mcrypt_decrypt(Mcrypt_3des, $key, $data, MCRYPT_MODE_ECB));

但是我得到的是这样的:e2119b734b5050e3fa8717ee17f3a548

但如果我在 http://tripledes.online-domain-tools.com/ 上运行相同的解密 或http://www.emvlab.org/descalc/?key=aaaaaaaabbbbbbbbccccccccdddddddd&iv=0000000000000000&input=b5057bbc04b842a96144a0f617f2820e&mode=ecb&action=Decrypt&output=54657374313233313233000000000000

它实际上解密到54 65 73 74 31 32 33 31 32 33 00 00 00 00 00 00

实际上是Test123123

对可能是什么问题有什么建议吗?

编辑:

我已经尝试切换到openssl_decrypt

但是我一直收到错误的返回。

代码:

$result = openssl_decrypt($data,'des-ede3', $key);
result = bool(false)

【问题讨论】:

  • 仅供参考,mcrypt is a dead project 可能会从 PHP 的未来版本中删除
  • @Machavity 很高兴知道,我可以使用任何更新的函数吗?
  • 您是否看到下面无数警告说不要使用它?我觉得从来没有人这样做过!
  • 最好不要使用mcrypt,它是废弃软件,多年未更新,不支持标准PKCS#7(née PKCS#5)填充,只有非标准空填充可以'甚至不能与二进制数据一起使用。 mcrypt 有许多出色的 bugs 可以追溯到 2003 年。请考虑使用 defuseRNCryptor,它们提供了完整的解决方案并且正在维护并且是正确的。

标签: php encryption mcrypt 3des php-openssl


【解决方案1】:

我能够使用开放的 SSL 解密功能让它工作:

$key = 'aaaaaaaabbbbbbbbccccccccdddddddd';
$key = pack('H*',$key);

// DATA
$data = 'b5057bbc04b842a96144a0f617f2820e';
$data = pack('H'.strlen($key),$data);

// DECRYPT OPEN SSL
$result = openssl_decrypt($data,'des-ede', $key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING);

【讨论】:

    猜你喜欢
    • 2012-03-30
    • 1970-01-01
    • 1970-01-01
    • 2011-10-22
    • 2012-05-06
    • 1970-01-01
    • 2015-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多