Extrahieren passwortgeschützter ZIP-Dateien in Golang 1.2 ohne native Unterstützung
Während das Archiv-/Zip-Paket in Go 1.2 grundlegende ZIP-Funktionalität bietet, Es fehlen Mechanismen zum Umgang mit passwortgeschützten Archiven. Um diese Lücke zu schließen, wird empfohlen, das Paket os/exec zu nutzen und ein externes Tool wie 7-zip für die Extraktion zu verwenden.
Verwenden Sie 7-zip zum Extrahieren passwortgeschützter ZIP-Dateien
7-zip bietet robuste Befehlszeilenfunktionen zum Bearbeiten von Archiven, einschließlich passwortgeschützter ZIP-Dateien. So können Sie dies in Go mit os/exec erreichen:
<code class="go">import ( "os/exec" "fmt" ) func extractZipWith7zip(zipPath, extractPath, password string) { cmdString := fmt.Sprintf("7za e %s -o%s -p%s", zipPath, extractPath, password) cmd := exec.Command("7za", strings.Fields(cmdString)...) err := cmd.Run() if err != nil { panic(err) } }</code>
Beispielprogramm
Das folgende Go-Programm demonstriert den gesamten Prozess der Erstellung eines passwortgeschützten Programms ZIP-Datei, extrahieren Sie sie mit 7-zip und überprüfen Sie den extrahierten Inhalt:
<code class="go">package main import ( "fmt" "os" "os/exec" "path/filepath" "strings" ) var ( originalText = "Sample file created" txtFilename = "name.txt" zipFilename = "sample.zip" zipPassword = "42" dirPath = "./test" srcPath = filepath.Join(dirPath, "src") extractPath = filepath.Join(dirPath, "extracted") txtPath = filepath.Join(srcPath, txtFilename) zipPath = filepath.Join(srcPath, zipFilename) ) func main() { fmt.Println("# Setup") setupTestDirectory() createSampleFile() createZipWithPassword() fmt.Println("# Extraction of password-protected ZIP...") extractZipWithPassword() verifyExtractedFile() fmt.Println("Done.") } func setupTestDirectory() { os.RemoveAll(dirPath) os.MkdirAll(srcPath, os.ModePerm) os.MkdirAll(extractPath, os.ModePerm) } func createSampleFile() { file, err := os.Create(txtPath) if err != nil { panic(err) } defer file.Close() _, err = file.WriteString(originalText) if err != nil { panic(err) } } func createZipWithPassword() { cmdString := fmt.Sprintf("7za a %s %s -p%s", zipPath, txtPath, zipPassword) cmd := exec.Command("7za", strings.Fields(cmdString)...) err := cmd.Run() if err != nil { panic(err) } } func extractZipWithPassword() { cmdString := fmt.Sprintf("7za e %s -o%s -p%s", zipPath, extractPath, zipPassword) cmd := exec.Command("7za", strings.Fields(cmdString)...) err := cmd.Run() if err != nil { panic(err) } } func verifyExtractedFile() { extractedPath := filepath.Join(extractPath, txtFilename) content, err := os.ReadFile(extractedPath) if err != nil { panic(err) } if string(content) != originalText { panic("Extracted content mismatch") } }</code>
Hinweis: Stellen Sie sicher, dass 7-zip auf Ihrem System installiert und im Pfad Ihres Systems für enthalten ist dieser Ansatz zur Arbeit.
Das obige ist der detaillierte Inhalt vonWie extrahiere ich passwortgeschützte ZIP-Dateien in Golang 1.2 ohne native Unterstützung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!