我需要解密用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
为了方便您,我想分享一下加密计算器的结果。
我也收到了警告: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
答案 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);