使用十六进制密钥从十六进制数据中解密3des

时间:2016-12-21 22:09:39

标签: php encryption mcrypt 3des tripledes

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

  

关键: aaaaaaaabbbbbbbbccccccccdddddddd

     

数据: b5057bbc04b842a96144a0f617f2820e

     

预期结果: Test123123

使用模式ECB通过3DES加密数据。我正在使用的代码将十六进制值解密为“e2119b734b5050e3”,转换为“sKPPã”。我试过使用open ssl返回“False”。

代码如下:

(PHP Version 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];

1 个答案:

答案 0 :(得分: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于2009年发布,并且自2015年起不再支持)PHP版本。