确定rar文件是否受密码保护

Determine if rar file is password protected

本文关键字:密码保护 是否 文件 rar 确定      更新时间:2023-09-26

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

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

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

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

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

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文件(包括多卷等)。

您可以随时尝试此

对于那些不能perlmonks的人:

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

由rubasov:

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

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

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