将des字符串解密为纯文本

时间:2018-01-17 21:21:01

标签: php encryption encryption-symmetric

我需要解密用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);

decryptedData的输出为空。我检查了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

的二进制表示

为了方便您,我想分享一下加密计算器的结果。enter image description here 我也收到了警告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

2 个答案:

答案 0 :(得分:2)

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

另外,停止使用mcrypt。它已经破旧了,已经从PHP 7.2中删除了。

答案 1 :(得分:0)

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

$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);