2010-09-17 119 views
2

我需要能够从Windows的某些C/C++代码中解压缩某些AES(WinZip)加密zip文件。有没有人有办法做到这一点?我希望有一些适当的代码或我可以使用的DLL(有一个示例用法)。到目前为止,我的搜索已经证明没有结果在Windows上以编程方式解压缩AES加密zip文件

常用的InfoZip库不支持AES加密。

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

+0

我不会将它作为回答发布,因为这只是一个建议,但您可以查看7z源代码并查看它使用的zip库。由于整个事情是GPL的,它应该使用GPLed/LGPLed的东西也用于“正常”的zip解码。不幸的是,从我所看到的zip压缩代码不在提供的SDK中(这仅适用于7z格式),因此您必须深入研究7z *应用程序*代码。 – 2010-09-17 10:30:46

回答

5

这里是minizip zlib贡献AES加密和解密支持。 https://github.com/nmoinvaz/minizip

+0

这是我最终使用的代码,因为我已经在使用minizip代码。尽管有一些建议:编译器试图找出系统的末端(aesopt.h&sha1.c)有两个地方。它没有与我使用的编译器一起工作,花了一段时间才发现问题所在。建议在sha1.c周围写一些测试代码,以证明它在第一步中产生了预期的结果,如果解压缩不起作用的话。 – Evan 2010-10-24 21:35:52

+1

现在链接已死。 – Crashworks 2012-05-07 21:33:01

+0

我已经更新了aes库,所以它应该修复endian问题。 – 2012-06-04 17:01:36

0

DotNetZip可以做到这一点。如果你不反对使用Managed C++。

DotNetZip documentation开始,这是的代码创建的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,所以我有一定的偏爱它!但是我没有看到100次执行7z.exe有什么问题?你关心性能吗?