我想要得到的校驗脫穎而出的二進制文件 運行PHP的Perl和PHP MD5文件校驗和不匹配
$checksum =md5_file($fname)
和perl的
use Digest::MD5;
open FILE, "$fname";
$ctx = Digest::MD5->new;
$ctx->addfile(*FILE);
$checksum = $ctx->hexdigest;
我得到不同的結果 足夠有趣的運行在一個小文本文件上返回相同的校驗和
我想要得到的校驗脫穎而出的二進制文件 運行PHP的Perl和PHP MD5文件校驗和不匹配
$checksum =md5_file($fname)
和perl的
use Digest::MD5;
open FILE, "$fname";
$ctx = Digest::MD5->new;
$ctx->addfile(*FILE);
$checksum = $ctx->hexdigest;
我得到不同的結果 足夠有趣的運行在一個小文本文件上返回相同的校驗和
用Perl,你確定文件句柄是在binmode如the documentation建議?
在大多數情況下,您希望在將其作爲參數傳遞給addfile()方法之前確保$ io_handle在binmode中。
我修改從文檔的例子來匹配您的例子:
use Digest::MD5;
open (my $fh, '<', $fname) or die "Can't open '$fname': $!";
binmode ($fh);
my $checksum = Digest::MD5->new->addfile($fh)->hexdigest;
做了詭計,謝謝 –
你應該打開該文件後,使用binmode(FILE)
。如果你仍然有這種變化的差異,再看看你的PHP代碼,因爲更新的Perl代碼產生正確的輸出:
$ perl dm.pl .bashrc
f5bb0773a3346814d978f9a155176d8e
$ md5sum .bashrc
f5bb0773a3346814d978f9a155176d8e *.bashrc
有你證實,這兩個輸入是相同的,一旦他們進入相應語言的內臟,例如在輸入到md5內核之前沒有行結束的翻譯? –