将 des 字符串解密为纯文本

Decrypt a des string in to plain text

我需要解密一个用des算法加密的字符串。在 PHP 中我该怎么办?我有如下真实测试用例:

key ='0123456789abcdef'
encryptedValue = '88C10F0B8C084E5F'; //hex value
decodedValue = '2020202039353538';  // this is hex

我试过了

$keyValue ='0123456789abcdef';
$encryptedValue = '88C10F0B8C084E5F'; //hex value
$decodedValue = '2020202039353538';  // this is hex

$decryptedData = mcrypt_decrypt( MCRYPT_DES, $keyValue, $encryptedValue , 'ecb');
var_dump($decryptedData);
var_dump($decodedValue);

解密数据的输出为空。 我检查了 this solution。请给我一个解决方案。

更新:2017 年 1 月 18 日: 许多人建议我不要使用 des 或 mcrypt。 我需要解密这个,因为我的 API 提供者用这个算法回复我。 关于 mcrypt_decrypt 函数,我没有找到替代方案。现在请给我更多建议。

我按照@duskwuff试了一下,修改为。

$decryptedData = mcrypt_decrypt( MCRYPT_DES, $keyValue, hex2bin($encryptedValue) 'ecb');
var_dump(bin2hex($decryptedData));

输出是空字符串,这显然是bool false

的二进制表示

为方便起见,我想分享加密计算器的结果。 我也收到此 警告Warning: mcrypt_decrypt(): Key of size 16 not supported by this algorithm. Only keys of size 8 supported in /var/www/html/encdec/enc.phtml on line 13

您传递给 mcrypt_decrypt() 的值看起来像是十六进制数据的表示,而不是直接传递的。在输入上使用 hex2bin() 将它们转换为二进制数据,并使用 bin2hex() 将输出转换回预期的表示形式。

另外,停止使用 mcrypt。它又旧又破,已从 PHP 7.2.

中删除

我使用以下代码解决了我的问题:

$keyValue ='0123456789abcdef'; //hex value
$encryptedOrderId = '88C10F0B8C084E5F'; //hex value
$decodeValueByOnlineTool = '2020202039353538';  // this is hex
$opensslDecrypt = openssl_decrypt(  hex2bin($encryptedOrderId)  , 'des-ecb' , hex2bin($keyValue) , OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING , '' );
var_dump($opensslDecrypt);