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

How to know if a rar file is password protected through file signature using Java?

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

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

这是 RAR 文件格式规范:

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

您似乎需要逐步完成 headers -- 使用 header 大小和 header 类型字段来指导您 -- 直到您到达 "end of data" header 或 "archive encryption" header.

这意味着遍历大部分文件。您可以通过使用 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;
}

(我没有测试过上面的代码)