使用十六进制密钥从十六进制数据中解密 3des
Decrypting 3des from hex data with a hex key
我正在尝试使用 mycrypt php 库解密以下内容:
Key: aaaaaaaabbbbbbbbccccccccdddddddd
Data: b5057bbc04b842a96144a0f617f2820e
Expected Result: Test123123
数据使用 ECB 模式的 3DES 加密。我目前正在使用的代码将十六进制值解密为 "e2119b734b5050e3",转换为“â›sKPPã”。我尝试使用返回 "False" 的 open 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), "[=10=]");
$decryptedHex = unpack('H*',$data);
// DECRYPT OPEN SSL (RETURNS FALSE)
$result = openssl_decrypt($data,'des-ede3', $key);
// ECHO
echo $decryptedHex[1];
这里的问题是缺少太多信息——3DES 的确切变体,填充信息。稍微摆弄一下加密选项,而不是解密,可以尝试生成密文以找到正确的选项。结果是
openssl_encrypt($ptext,'des-ede', $key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING)
其中 $ptext
是 "Test123123[=13=][=13=][=13=][=13=][=13=][=13=]"
密文同样可以通过
解密
$result = openssl_decrypt($data,'des-ede', $key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING);
您将需要升级到 PHP 的更新且受支持(PHP 5.3 于 2009 年发布,自 2015 年起不再受支持)版本。
我正在尝试使用 mycrypt php 库解密以下内容:
Key: aaaaaaaabbbbbbbbccccccccdddddddd
Data: b5057bbc04b842a96144a0f617f2820e
Expected Result: Test123123
数据使用 ECB 模式的 3DES 加密。我目前正在使用的代码将十六进制值解密为 "e2119b734b5050e3",转换为“â›sKPPã”。我尝试使用返回 "False" 的 open 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), "[=10=]");
$decryptedHex = unpack('H*',$data);
// DECRYPT OPEN SSL (RETURNS FALSE)
$result = openssl_decrypt($data,'des-ede3', $key);
// ECHO
echo $decryptedHex[1];
这里的问题是缺少太多信息——3DES 的确切变体,填充信息。稍微摆弄一下加密选项,而不是解密,可以尝试生成密文以找到正确的选项。结果是
openssl_encrypt($ptext,'des-ede', $key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING)
其中 $ptext
是 "Test123123[=13=][=13=][=13=][=13=][=13=][=13=]"
密文同样可以通过
解密$result = openssl_decrypt($data,'des-ede', $key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING);
您将需要升级到 PHP 的更新且受支持(PHP 5.3 于 2009 年发布,自 2015 年起不再受支持)版本。