Perl - SHA1与PHP不匹配

Str*_*ero 2 php perl md5 sha1

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

有什么我误解或遗失的东西?

Perl代码:(v5.14.2)

use Digest::SHA 'sha1_hex';
print Digest::SHA->sha1_hex("test");
# outputs e2412033b6d0070b931d01b0d1783b937608eb7f
Run Code Online (Sandbox Code Playgroud)

PHP代码:(v5.4)

echo sha1("test");
//outputs: a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
Run Code Online (Sandbox Code Playgroud)

el.*_*ado 8

你的程序应该是这样的:

use Digest::SHA 'sha1_hex';
print sha1_hex("test");
Run Code Online (Sandbox Code Playgroud)

要么

use Digest::SHA;
print Digest::SHA::sha1_hex("test"); # note ::
Run Code Online (Sandbox Code Playgroud)

当你打电话时Digest::SHA->sha1_hex("test");,你正在使用所谓的"间接对象"表示法,这相当于sha1_hex("Digest::SHA", "test")·这就是你得到不同哈希的原因:

use Digest::SHA 'sha1_hex';
say sha1_hex("Digest::SHAtest")
# -> e2412033b6d0070b931d01b0d1783b937608eb7f
Run Code Online (Sandbox Code Playgroud)

  • 实际上这是一个直接的方法调用,而不是间接的对象表示法.间接对象​​表示法是`my $ result = methodname $ object @ arguments`,而标准(直接)方法调用就像`my $ result = $ object-> method(@arguments)`.但是在这种情况下都不需要,因为`sha1_hex`是一个函数而不是一个方法. (4认同)