【问题标题】:Perl - SHA1 not matching PHPPerl - SHA1 不匹配 PHP
【发布时间】:2014-06-03 05:29:31
【问题描述】:

缺乏我在 perl 方面的经验。但是,根据我在网上阅读的内容并看到谷歌搜索这个问题; perl 的 md5、sha1、sha256 ...应该返回与 php 或任何其他语言相同的哈希值,但不是。

我有什么误解或遗漏吗?

Perl 代码: (v5.14.2)

use Digest::SHA 'sha1_hex';
print Digest::SHA->sha1_hex("test");
# outputs e2412033b6d0070b931d01b0d1783b937608eb7f

PHP 代码: (v5.4)

echo sha1("test");
//outputs: a94a8fe5ccb19ba61c4c0873d391e987982fbbd3

【问题讨论】:

  • $ perl -MDigest::SHA=sha1_hex -E 'say sha1_hex("test")' 产生a94a8fe5ccb19ba61c4c0873d391e987982fbbd3

标签: php perl md5 sha1


【解决方案1】:

您的程序应如下所示:

use Digest::SHA 'sha1_hex';
print sha1_hex("test");

use Digest::SHA;
print Digest::SHA::sha1_hex("test"); # note ::

当您调用Digest::SHA->sha1_hex("test"); 时,您使用的是所谓的“间接对象”表示法,相当于sha1_hex("Digest::SHA", "test")· 这就是为什么您会得到不同的哈希:

use Digest::SHA 'sha1_hex';
say sha1_hex("Digest::SHAtest")
# -> e2412033b6d0070b931d01b0d1783b937608eb7f

【讨论】:

  • 其实这是一个直接的方法调用,而不是间接的对象表示法。间接对象​​表示法是my $result = methodname $object @arguments,而标准(直接)方法调用类似于my $result = $object->method(@arguments)。但在这种情况下,两者都不需要,因为sha1_hex 是一个函数而不是一个方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-21
  • 1970-01-01
  • 2014-02-26
  • 2013-07-15
相关资源
最近更新 更多