4

我希望能够确定文件的开头部分(最好是第一个 MB 左右)是否属于受密码保护的 rar 文件。我不仅需要知道它是否是 rar 文件,我还需要确保该文件受密码保护。

这可能吗?我知道 rar 格式是专有格式,但这可能吗?

编辑:我想通过使用 javascript 或 perl 检查文件的内容来做到这一点。它不应该访问 rar 库。

Edit2:到目前为止,至少有一些一致性,我已经能够确定如果没有启用加密,第 10 个字节似乎总是设置为零。我还没有做足够的测试来确认这是否可靠,但尽管如此,这就是我看到的结果。

4

2 回答 2

1

你总是可以试试这个

对于那些不能 perlmonks 的人:

回复:确定文件是否受密码保护

鲁巴索夫:

如果您不想为每个扩展实施特定于文件格式的测试,那么您可以查看数据的随机性。任何设计良好的加密方案都会产生看起来随机的加密数据(以抵制统计分析)。但是,如果加密设计不当,这对您没有多大帮助。

请注意,这种方法有严重的警告:如果您的数据可以是真实/伪随机或压缩数据,那么它看起来也像一堆随机位,例如,您将无法区分简单和加密的 rar/zip 文件。(并且不要忘记简单的文档格式可以在内部使用压缩。)

对于 CPAN 上的卡方测试的具体实现搜索(我没有看过,但我几乎可以肯定你会找到一些实现)并尝试用它来试验它是否足以满足你的目的。

于 2012-02-26T23:03:37.583 回答
1

我的实验给了我以下子程序:

sub is_rarfile_protected {
   my ($rar_filename) = @_;
   open my $rar_fh, '<', $rar_filename or die $!, "\n";
   sysread $rar_fh, my $mark, 25;
   return ord (substr $mark, -1) & 0b100; 
}

...到目前为止对我有用。

遗憾的是,我没有安装 Rar,所以我无法检查它是否适用于所有密码加密的 rar 文件(包括多卷等)。

于 2012-02-27T00:38:36.010 回答