我正在尝试使用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];
答案 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版本。