【问题标题】:Decrypt des with openssl_decrypt in PHP在 PHP 中使用 openssl_decrypt 解密 des
【发布时间】:2018-01-18 15:04:37
【问题描述】:

尝试使用此代码解密单个 des 加密数据:

$keyValue ='0123456789abcdef'; //hex value
$encryptedOrderId = '88C10F0B8C084E5F'; //hex value
$binaryEncrypted = hex2bin($encryptedOrderId);
$decodeValueByOnlineTool = '2020202039353538';  // this is hex
$opensslDecrypt = openssl_decrypt(  $encryptedOrderId  ,'DES-ECB', $keyValue, OPENSSL_RAW_DATA , '' );
var_dump($opensslDecrypt);

输出为假。我不知道我做错了什么。

我的工具的输出如下:

【问题讨论】:

  • 您在拨打openssl_decrypt 时没有使用keyValue,您不觉得奇怪吗?您是否真的编写了该代码,或者您在不理解的情况下从某个地方复制了它?我建议您阅读openssl_decrypt 的文档。
  • 抱歉,我是如何从我的代码中删除它的,请检查我的更新。
  • DES 密钥的长度为 64 位(包括奇偶校验),但您传入的(提示:hex)字符串被解释为 128 位。你能从中找出问题所在吗?显然,您的警告也很重要。
  • 实际上并非如此,如果可行,请给出答案,我将其标记为正确。你的意思是说我需要把它转换成二进制?
  • 是的,你知道。并修复 IV。我认为这是不言自明的。

标签: encryption openssl cryptography php-5.6


【解决方案1】:

您的输入是十六进制的。 openssl_decrypt 需要二进制文件。在传递给openssl_decrypt之前,在每个输入上使用hex2bin

openssl_decrypt(hex2bin($encryptedOrderId), 'DES-ECB', hex2bin($keyValue), ...

记得将结果转换回十六进制以获得您想要的结果。确保您已根据屏幕截图设置OPENSSL_ZERO_PADDING

编辑:我使用的确切代码...

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

【讨论】:

  • 我也这样做了。返回 false。
  • 没有填充?
  • 在第四个参数中带有 OPENSSL_ZERO_PADDING。空字符串输出
  • 查看我上面使用的确切代码。绝对适合我。
  • 让我检查一下。
猜你喜欢
  • 1970-01-01
  • 2014-02-26
  • 2017-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多