【问题标题】:Decrypting 3des from hex data with a hex key使用十六进制密钥从十六进制数据中解密 3des
【发布时间】:2017-05-07 11:10:53
【问题描述】:

我正在尝试使用 mycrypt php 库来解密以下内容:

键: aaaaaaaabbbbbbbbccccccccdddddddddd

数据: b5057bbc04b842a96144a0f617f2820e

预期结果: Test123123

数据使用 3DES 加密,模式为 ECB。我目前正在使用的代码将十六进制值解密为“e2119b734b5050e3”,转换为“â›sKPPã”。我尝试使用返回“False”的开放 ssl。

代码如下:

(PHP 版本 5.3.3)

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

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

// DECRYPT MCRYPT
$data = rtrim(mcrypt_decrypt(MCRYPT_3DES, $key, $data, MCRYPT_MODE_ECB), "\0");
$decryptedHex = unpack('H*',$data);

// DECRYPT OPEN SSL (RETURNS FALSE)
$result = openssl_decrypt($data,'des-ede3', $key);

// ECHO
echo $decryptedHex[1];

【问题讨论】:

  • 哎呀。如果您避免使用 mcrypt,您的生活将会大大改善。 paragonie.com/blog/2015/05/…
  • @pvg 我已经尝试过 mcrypt 和 openSSL。使用 openSSL 时,我收到“错误”响应。我已将此代码添加到问题中。
  • 检查 openssl php 绑定文档。您需要为原始数据设置一些选项
  • 另外,缺少填充信息。您的测试字符串看起来不像块大小。这实际上是如何以及使用什么参数加密的?
  • @pvg 数据使用 3DES 和 EBC 模式加密。我不确定该过程是如何通过第三方完成的。我知道它已成功加密,因为我使用了在线工具,例如:tripledes.online-domain-tools.com 似乎已成功解密数据。

标签: php encryption mcrypt 3des tripledes


【解决方案1】:

这里的问题是缺少太多信息 - 3DES 的确切变体,填充信息。稍微摆弄加密选项,而不是解密,可以尝试生成密文以找到正确的选项。他们原来是

openssl_encrypt($ptext,'des-ede', $key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING)

$ptext"Test123123\0\0\0\0\0\0"

密文可以通过类似的方式解密

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

您需要升级到较新且受支持(PHP 5.3 于 2009 年发布,自 2015 年起不再支持)版本的 PHP。

【讨论】:

  • 谢谢!我在更新版本的 PHP 上尝试了这段代码,它工作正常。我创建了另一个问题,我试图将此代码转换为等效的 openSSL 命令行:link。如果您认为可以提供帮助,请查看。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-18
  • 2011-04-21
  • 2014-07-10
  • 2014-12-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多