2010-09-17 116 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有什麼問題?你關心性能嗎?