C++ 在Windows上以编程方式解压缩AES加密的zip文件

C++ 在Windows上以编程方式解压缩AES加密的zip文件,c++,c,windows,aes,unzip,C++,C,Windows,Aes,Unzip,我需要能够从Windows上的一些C/C++代码中解压一些AES WinZip加密的zip文件。有人有办法做到这一点吗?我希望有一些合适的代码或DLL,我可以用一个例子来使用。到目前为止,我的搜索没有结果 通常规定的InfoZip库不支持AES加密 目前我拥有的最佳解决方案是从我的程序中调用7z.exe命令行程序,但考虑到我将解压缩100个左右的文件,这并不理想。以下是minizip zlib的贡献,它支持AES加密和解密。 我能做到。如果您不反对使用托管C++。 从中,这是创建AES加密zip

我需要能够从Windows上的一些C/C++代码中解压一些AES WinZip加密的zip文件。有人有办法做到这一点吗?我希望有一些合适的代码或DLL,我可以用一个例子来使用。到目前为止,我的搜索没有结果

通常规定的InfoZip库不支持AES加密


目前我拥有的最佳解决方案是从我的程序中调用7z.exe命令行程序,但考虑到我将解压缩100个左右的文件,这并不理想。

以下是minizip zlib的贡献,它支持AES加密和解密。 我能做到。如果您不反对使用托管C++。 从中,这是创建AES加密zip文件的代码。要提取的代码类似

#include "stdafx.h"

using namespace System;
using namespace Ionic::Zip;

int main(array<System::String ^> ^args)
{
    Console::WriteLine(L"Hello World");

    ZipFile ^ zip;
    try
    {
        zip = gcnew ZipFile();
        zip->Password = "Harbinger";
        zip->Encryption = EncryptionAlgorithm::WinZipAes128;
        zip->AddEntry("Readme.txt", "This is the content for the Readme.txt entry.");
        zip->Save("test.zip");
    }
    finally
    {
        zip->~ZipFile();
    }

    Console::WriteLine(L"Press <ENTER> to quit.");
    Console::ReadLine();
    return 0;
}

另外-我写了DotNetZip,所以我对它有一定的偏爱!但我看不出执行7z.exe 100次有什么不对?你关心表现吗

是最好的选择。

我不把它作为一个答案发布,因为它只是一个建议,但您可以查看7z源代码,看看它使用了什么zip库。因为整个东西都是GPLed,所以它也应该使用GPLed/LGPLed来进行正常的zip解码。不幸的是,从我所看到的,邮政编码不在提供的SDK中,它只是针对7z格式,所以你必须挖掘7z应用程序代码。这是我最终使用的代码,因为我已经在使用迷你邮政编码。不过有一些建议:编译器在两个地方试图找出系统aesopt.h和sha1.c的endian。它与我使用的编译器不兼容,花了一段时间才发现问题所在。建议围绕sha1.c编写一些测试代码,以证明如果解压无法立即进行,它会产生预期的结果,这是第一步。我已更新了aes库,因此它应该修复endian问题。您可能必须指定压缩度-9才能获得7-zip格式的报告,说明aes-256 Deflate是压缩文件项的属性。zip目录树未加密,即文件名可见。比使用7-zip库更简单。