如何知道 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;
}
(我没有测试过上面的代码)
有没有办法通过查看文件签名或 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;
}
(我没有测试过上面的代码)