我需要能够从Windows的某些C/C++代码中解压缩某些AES(WinZip)加密zip文件。有没有人有办法做到这一点?我希望有一些适当的代码或我可以使用的DLL(有一个示例用法)。到目前为止,我的搜索已经证明没有结果在Windows上以编程方式解压缩AES加密zip文件
常用的InfoZip库不支持AES加密。
目前我的最佳解决方案是从我的程序中调用7z.exe命令行程序,但考虑到我将解压缩100个文件左右,这并不理想。
我需要能够从Windows的某些C/C++代码中解压缩某些AES(WinZip)加密zip文件。有没有人有办法做到这一点?我希望有一些适当的代码或我可以使用的DLL(有一个示例用法)。到目前为止,我的搜索已经证明没有结果在Windows上以编程方式解压缩AES加密zip文件
常用的InfoZip库不支持AES加密。
目前我的最佳解决方案是从我的程序中调用7z.exe命令行程序,但考虑到我将解压缩100个文件左右,这并不理想。
这里是minizip zlib贡献AES加密和解密支持。 https://github.com/nmoinvaz/minizip
这是我最终使用的代码,因为我已经在使用minizip代码。尽管有一些建议:编译器试图找出系统的末端(aesopt.h&sha1.c)有两个地方。它没有与我使用的编译器一起工作,花了一段时间才发现问题所在。建议在sha1.c周围写一些测试代码,以证明它在第一步中产生了预期的结果,如果解压缩不起作用的话。 – Evan 2010-10-24 21:35:52
现在链接已死。 – Crashworks 2012-05-07 21:33:01
我已经更新了aes库,所以它应该修复endian问题。 – 2012-06-04 17:01:36
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有什么问题?你关心性能吗?
我不会将它作为回答发布,因为这只是一个建议,但您可以查看7z源代码并查看它使用的zip库。由于整个事情是GPL的,它应该使用GPLed/LGPLed的东西也用于“正常”的zip解码。不幸的是,从我所看到的zip压缩代码不在提供的SDK中(这仅适用于7z格式),因此您必须深入研究7z *应用程序*代码。 – 2010-09-17 10:30:46