【问题标题】:Different results between PHP md5() and Ruby Digest::MD5.hexdigestPHP md5() 和 Ruby Digest::MD5.hexdigest 的结果不同
【发布时间】:2014-05-28 13:06:23
【问题描述】:

我想把一个 Ruby 程序生成的 MD5 哈希传递给一个 PHP 程序,结果发现了一些奇怪的东西。

Ruby 代码(结果:ad0efdf609e99ec50d9333dc0bd1c11a)

Digest::MD5.hexdigest 'test str1&test str2&test str3&test str4'

PHP代码(结果:804160119894a4cc8c376fffbcc21e1c)

PHP online MD5 generator

您可以看到结果有所不同...但是如果我删除字符串中的“&”:

Ruby 代码(结果:45fa91e4c89aa6f3bb501531a5de6bf4)

Digest::MD5.hexdigest 'test str1test str2test str3test str4'

PHP 代码(结果:45fa91e4c89aa6f3bb501531a5de6bf4)

PHP online MD5 generator

它们是一样的。为什么会这样? MD5算法在任何语言中都应该是一样的,不是吗?

【问题讨论】:

  • 我认为这些 &$#% 用不同的语言编写不同的字符串。有时它是由 4 位代码编写的。你试过转义这个字符串吗?
  • 您的默认编码是什么? :stackoverflow.com/questions/16753321/…
  • 我真的希望你不要使用这些密码。

标签: php ruby md5


【解决方案1】:

那个网站的结果是错误的。

这里有一个例子(在命令行上使用 PHP):

php -r 'echo md5("test str1&test str2&test str3&test str4");'

输出:

ad0efdf609e99ec50d9333dc0bd1c11a

【讨论】:

  • 正确,MD5生成器实际上是在第一个例子中运行test str1的哈希。
  • 非常感谢,我完全对结果感到困惑。你救了我。
  • 不客气。您可以给网站所有者写一封电子邮件并通知他。我相信他会很感激的。
【解决方案2】:

804160119894a4cc8c376fffbcc21e1ctest str1 的 MD5 哈希,而不是 test str1&test str2&test str3&test str4

那个在线生成器在读取 POST 数据时明显损坏了它。根据 Firebug 的说法,发送到服务器的数据已经损坏,因此问题在于其客户端表单处理。很容易找到问题所在:

function sendHttpRequest(w){
    var url = "http://www.md5.cz/getmd5.php";
    var idWhat = document.getElementById('what');
    var params = "what=" + idWhat.value;
                           ^^^^ Pardon???

正确的哈希是ad0efdf609e99ec50d9333dc0bd1c11a

【讨论】:

  • 非常感谢,你的回答和上面的都很好,我想接受你们两个,但我不能。所以我只能投票给你:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多