【问题标题】:mcrypt_decrypt() not returning correct datamcrypt_decrypt() 没有返回正确的数据
【发布时间】:2016-11-12 02:56:47
【问题描述】:

我只是在这里引用代码,但完整的代码可以在Pastebin找到。

我正在使用POST 请求向加密服务器发送数据或从加密服务器发送数据(我正在我的第二台服务器上进行加密工作,以增加安全性),这就是为什么最初收到的所有内容都是@987654328 @变量。

所以,基本上正在发生的事情是我正在使用加密脚本(可以在Pastebin 上找到)加密一些数据,然后从中获取加密数据并尝试使用相同的方法对其进行解密。我正在使用mcrypt_decrypt() 来解密数据。我已经对其进行了一些试验,当我尝试打印base64_decode() 返回的数据时,我没有得到任何价值。我认为这可能与错误有关,但结果是我得到了随机的 ASCII 字符,例如,这是我最近获得的结果:

]A}����/7Q�Ț��/����&������OO�

初始化向量和原始数据一起存放,我用explode()分隔,格式是这样的:"IV:Encrypted String"

当我运行它时,PHP 没有抛出任何错误,我基于 PHP documentation.

加密过程完美运行,解密脚本能够在解码和解密之前返回加密文本,因此数据正在到达服务器查找。

如果您需要更多信息,请在 cmets 中询问,我很乐意为您提供! :)

【问题讨论】:

  • 嘿,也许用github.com/defuse/php-encryption代替那个mcrypt代码?
  • 关于不使用 mcrypt_* 函数的标准评论,因为它们已被弃用并且不使用 PKCS7 填充等。
  • @Luke Park 哦,他们被弃用了,我从来不知道!
  • 最好不要使用mcrypt,它是废弃软件,多年未更新,不支持标准PKCS#7(née PKCS#5)填充,只有非标准的空填充可以'甚至不能与二进制数据一起使用。 mcrypt 有许多出色的 bugs 可以追溯到 2003 年。请考虑使用 defuse,它正在维护并且是正确的。
  • @DibDibs 开源很少被弃用,它只是被放弃等待下一次谷歌搜索以新鲜的方式呈现它,就好像它与所有其他人一样。哎呀,甚至微软也有一个使用 DES 的当前加密示例代码,过去十年不应该使用它!

标签: php security encryption base64 mcrypt


【解决方案1】:

数据是否存储在数据库中?如果是这样,您可能需要查看您的排序规则设置。 mcrypt_encrypt 方法可能会生成无法存储在数据库默认联盟中的字符,这将解释随机字符。

【讨论】:

  • 不,它不是,但它会,谢谢你的提醒,当我将它存储在数据库中时,转义字符串会解决这个问题吗?
猜你喜欢
  • 2017-04-14
  • 1970-01-01
  • 1970-01-01
  • 2013-10-14
  • 2015-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多