Verwenden Sie eine Bibliothek eines Drittanbieters, wie DotNetZip. Beachten Sie, dass Passwörter in Zip-Dateien auf Einträge angewendet werden und nicht auf die gesamte Zip-Datei. Daher ergibt Ihr Test nicht ganz Sinn.
Ein Grund, warum WinZip möglicherweise die Zip-Datei nicht entpacken kann, ist, dass der allererste Eintrag mit einem Passwort geschützt ist. Es könnte der Fall sein, dass nur einige Einträge durch ein Passwort geschützt sind und andere nicht. Es könnte auch sein, dass unterschiedliche Passwörter für verschiedene Einträge verwendet werden. Sie müssen entscheiden, was Sie mit diesen Möglichkeiten tun möchten.
Eine Option besteht darin anzunehmen, dass für Einträge in der Zip-Datei, die verschlüsselt sind, nur ein Passwort verwendet wird. (Dies ist nicht durch die Zip-Spezifikation vorgeschrieben) In diesem Fall ist hier ein Beispielcode zum Überprüfen des Passworts. Es gibt keine Möglichkeit, ein Passwort zu überprüfen, ohne die Entschlüsselung durchzuführen. Daher entschlüsselt dieser Code und extrahiert in Stream.Null.
public bool CheckZipPassword(string filename, string password)
{
bool success = false;
try
{
using (ZipFile zip1 = ZipFile.Read(filename))
{
var bitBucket = System.IO.Stream.Null;
foreach (var e in zip1)
{
if (!e.IsDirectory && e.UsesEncryption)
{
e.ExtractWithPassword(bitBucket, password);
}
}
}
success = true;
}
catch(Ionic.Zip.BadPasswordException) { }
return success;
}
Hoppla! Ich denke in C#. In VB.NET wäre dies:
Public Function CheckZipPassword(filename As String, password As String) As System.Boolean
Dim success As System.Boolean = False
Try
Using zip1 As ZipFile = ZipFile.Read(filename)
Dim bitBucket As System.IO.Stream = System.IO.Stream.Null
Dim e As ZipEntry
For Each e in zip1
If (Not e.IsDirectory) And e.UsesEncryption Then
e.ExtractWithPassword(bitBucket, password)
End If
Next
End Using
success = True
Catch ex As Ionic.Zip.BadPasswordException
End Try
Return success
End Function