Witam.
Dla własnych potrzeb napisałem programik odnajdujący hasło do pliku 7z.
Używam środowiska vb.net w Visual Studio 2022 w wersji 17.5.4
Program działa z prędkością docelową ok 4, hasła na sekundę.
Do rozpakowania archiwum użyłem pakietu Aspose.zip
Chciałbym przyspieszyć działanie kodu.
Na chwile obecną działający kod wygląda następująco (główna procedura):
Private Sub Analiza()
Dim Plik As New StreamReader(lbl_Plik.Text)
Dim Archiwum As SevenZipArchive
Dim Wiersz As String
Dim AktualneHasło As String = ""
Dim a() As String
Dim nr As Long
Dim Wynik As Boolean = False
My.Settings.Tpoczątek = Date.Now
Do While Not Plik.EndOfStream
Wiersz = Plik.ReadLine
a = Split(Wiersz, " ")
nr = CLng(a(0))
AktualneHasło = a(1)
If nr >= nud_Początek.Value And nr <= nud_Koniec.Value Then
If nr > nud_Koniec.Value Then Exit Do
Try
Archiwum = New SevenZipArchive(lbl_PlkŹródłowy.Text, AktualneHasło)
Archiwum.ExtractToDirectory(lbl_FolderRozpakowany.Text)
lbl_AktualneHasło.Text = nr & " - " & AktualneHasło
My.Settings.AktualneHasło = AktualneHasło
My.Settings.Save()
Wynik = True
Catch ex As Exception
End Try
If nr Mod 10 = 0 Then
My.Settings.Początek = nr
My.Settings.Tkoniec = Date.Now
My.Settings.Save()
End If
End If
If Wynik Then Exit Do
Loop
Plik.Close()
Plik.Dispose()
bt_Start.BackColor = Color.Lime
End Sub
Kluczowe dla algorytmu są następujące linie:
…..
Dim Archiwum As SevenZipArchive
….
Try
Archiwum = New SevenZipArchive(lbl_PlkŹródłowy.Text, AktualneHasło)
Archiwum.ExtractToDirectory(lbl_FolderRozpakowany.Text)
…..
Catch ex As Exception
End Try
Przypuszczam, że przeniesienie linii tworzenia nowego obiektu Archiwum do obszaru definicji powinno przyspieszyć działanie kodu.
Na podstawie dokumentacji Aspose.zip utworzyłem kod, który pozwoliłby wyeliminować wielokrotne tworzenie obiektu Archiwum.
Private Sub Pojedyncze()
Dim Archiwum As New SevenZipArchive()
Dim UstawieniaSzyfrowaniaZip As New UstawieniaSzyfrowania("Hefry1$")
Dim UstawieniaKompresjiZip As New UstawieniaKompresji
Dim UstawieniaWpisuZip As New SevenZipEntrySettings(UstawieniaKompresjiZip, UstawieniaSzyfrowaniaZip)
Archiwum.CreateEntry("a", "C:UsersMarekDesktopDeszyfracja_2binDebugnet6.0-windowsPracaSKANY.7z", True, UstawieniaWpisuZip)
Archiwum.ExtractToDirectory("C:UsersMarekDesktopDeszyfracja_2binDebugnet6.0-windowsPracaHasła2")
End Sub
Pewne obiekty wymagają utworzenia klas przeciążonych:
Public Class UstawieniaSzyfrowania
Inherits SevenZipEncryptionSettings
Sub New()
End Sub
Public Sub New(password As String)
MyBase.New(password)
End Sub
Private p_Hasło As String
Public WriteOnly Property Hasło() As String
Set(value As String)
p_Hasło = value
End Set
End Property
End Class
Public Class UstawieniaKompresji
Inherits SevenZipCompressionSettings
Public Overrides ReadOnly Property Method As SevenZipCompressionMethod
Get
Method = SevenZipCompressionMethod.LZMA2
End Get
End Property
End Class
Niestety przy uruchomieniu kodu dostaję błąd:
enter image description here
Nie bardzo rozumiem skąd taki błąd.
Z góry dziękuję za pomoc
Marek Mróz is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.