SevenZipSharp库:不能加密标头

本文关键字:加密 不能 SevenZipSharp | 更新日期: 2023-09-27 17:52:50

我的任务是用SevenZipSharp库创建受密码保护的ZIP。

我设法使文件内容与密码锁定,但是存档结构-文件名,目录层次结构可以在任何WinZip, 7-Zip或压缩文件夹中查看。

我使用cmp.EncryptHeaders = true;,但它似乎没有效果…

如何加密文件和目录名?谢谢。

    static void Main(string[] args)
    {
        const string LibraryPath = @"C:'Program Files'7-Zip'7z.dll";
        SevenZipCompressor.SetLibraryPath(LibraryPath);
        var cmp = new SevenZipCompressor();
        cmp.CompressionMethod = CompressionMethod.Default;
        cmp.CompressionLevel = CompressionLevel.Fast;
        cmp.ArchiveFormat = OutArchiveFormat.Zip;  // compatible with WinZip and Compressed folder
        cmp.ZipEncryptionMethod = ZipEncryptionMethod.ZipCrypto;  // compatible with old WinZip
        cmp.EncryptHeaders = true;
        cmp.FileCompressionStarted += (sender, e) =>
        {
            Console.WriteLine(((FileNameEventArgs)e).FileName);
        };
        const string archive = @"C:'temp'12.3G.zip";
        File.Delete(archive);
        cmp.CompressDirectory(@"C:'temp'Photos", archive, "password");
    }

SevenZipSharp库:不能加密标头

查看源代码,似乎该标志生效的唯一方法是将SevenZip用于OutArchiveFormat

从源代码:

if (EncryptHeaders && _archiveFormat == OutArchiveFormat.SevenZip && !SwitchIsInCustomParameters("he"))
{
    names.Add(Marshal.StringToBSTR("he"));
    var tmp = new PropVariant {VarType = VarEnum.VT_BSTR, Value = Marshal.StringToBSTR("on")};
    values.Add(tmp);
}