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

时间:2012-02-26 22:14:25

标签: javascript perl rar

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

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

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

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

You could always try this

对于那些不能说话的人:

  

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

     

by rubasov:

     

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

     

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

     

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