如何检查文件是不是通过 7zip 受密码保护?

Posted

技术标签:

【中文标题】如何检查文件是不是通过 7zip 受密码保护?【英文标题】:How do i check if a file is password protected via 7zip?如何检查文件是否通过 7zip 受密码保护? 【发布时间】:2012-01-10 04:46:01 【问题描述】:

我正在使用 7zip(命令行)查看 zip/rar/7z 文件。我基本上检查了有多少文件以及它有什么扩展名。比...我得到密码保护的文件。当整个文件受密码保护时(因此您无法查看文件名或其中的任何内容)我知道。但是,如果我可以看到该文件,我无法判断它们是否受密码保护。我压缩了两个文件,一个没有密码。 7z l filename.zip 显示两个 zip 中的文件相同

如何使用 7zip 检测存档中的文件是否受密码保护?

【问题讨论】:

冒犯超级用户,因为这明确说明了使用 7zip 方法。 (似乎与编程不太相关。) 我添加了 c# 标记,因为您的回答表明您实际上想在 C# 中以编程方式执行此操作。 @GregHewgill。是的。我不介意用 C++ 或者 python 我只是碰巧首先使用 C#/.NET。最初我尝试使用标准输出,但似乎我无法从标准输出/CLI 获取该数据 【参考方案1】:

对于 .7z 存档 - 使用垃圾密码进行测试时,如果存在密码,则会设置非零错误级别。

7z t -pxoxoxoxoxoxoxo archive.7z >nul 2>nul
if errorlevel 1 echo Password exists

【讨论】:

难道不能有其他原因导致非零错误级别吗?这似乎不会告诉您密码是否存在。【参考方案2】:
static bool IsPasswordProtected(string filename)

    string _7z = @"C:\Program Files\7-Zip\7z.exe";

    bool result = false;
    using (Process p = new Process())
    
        p.StartInfo.UseShellExecute = false;
        p.StartInfo.RedirectStandardOutput = true;
        p.StartInfo.RedirectStandardError = true;
        p.StartInfo.FileName = _7z;
        p.StartInfo.Arguments = $"l -slt \"filename\"";
        p.Start();
        string stdout = p.StandardOutput.ReadToEnd();
        string stderr = p.StandardError.ReadToEnd();
        p.WaitForExit();

        if (stdout.Contains("Encrypted = +"))
        
            result = true;
                        
    

    return result;

【讨论】:

【参考方案3】:

使用sevenzipsharp。它没有真正记录在案,但不难弄清楚。

SevenZipExtractor.SetLibraryPath(@"path\7-Zip\7z.dll");
using (var extractor = new SevenZipExtractor(fn1))

        if(extractor.Check())  //is not password protected

【讨论】:

这不是一个好的测试。如果存档损坏,在这种情况下也会显示此错误。此外,如果我们在多卷存档中选择非第一卷,在这种情况下也会抛出此问题。 @ShashankJain:我没有其他答案,所以我标记了这个。此外,这可能会给我一个误报,但出于我的需要,我不需要它提供的误报

以上是关于如何检查文件是不是通过 7zip 受密码保护?的主要内容,如果未能解决你的问题,请参考以下文章

如何检查 InputStream 7Z 存档文件是不是受密码保护?

如何检查 PDF 是不是受密码保护

在 Powershell 中查找受密码保护的 .ZIP 文件

检查 zip 或 gzip 是不是经过密码加密(Node.JS)

检测 iPhone/iPad 是不是受密码保护

如何在 C# 中的 WinRAR、7Zip、Zip、Tar、Winzip 中检查文件是不是存在