如何知道 rar 文件是否通过使用 Java 的文件签名进行密码保护



有没有办法通过查看其文件签名或Java中的任何其他方法来检查RAR文件是否受密码保护?

我已经知道RAR文件签名是52 61 72 21 1A 07 00,但是我如何判断文件是否通过文件签名受到保护?或者你能建议一种方法来检测这一点吗?

这是 RAR 文件格式规范:

http://www.rarlab.com/technote.htm#enchead

看起来您需要逐步浏览标头 - 使用标头大小和标头类型字段来指导您 - 直到到达"数据结束"标头或"存档加密"标头。

这意味着遍历文件的大部分内容。您可以使用 MemoryMapReader 来避免咀嚼您不感兴趣的字节,从而使磁盘上的文件性能相当好。

您应该能够使用第三方库完成此操作。Junrar是一个受欢迎的。

使用Junrar,你可以写出这样的东西:

public boolean isArchiveEncrypted(String pathToFile)
{
    try
    {
        Archive arch = new Archive(new File(pathToFile));
        return arch.isEncrypted();
    }
    catch (RarException e)
    {
        logger.error(e);
    }
    catch (IOException e)
    {
        logger.error(e);
    }
    return false;
}

(我还没有测试上面的代码(

最新更新