Heim > Backend-Entwicklung > Golang > Wie extrahiere ich passwortgeschützte ZIP-Dateien in Golang 1.2 ohne native Unterstützung?

Wie extrahiere ich passwortgeschützte ZIP-Dateien in Golang 1.2 ohne native Unterstützung?

Mary-Kate Olsen
Freigeben: 2024-10-31 01:46:29
Original
788 Leute haben es durchsucht

How to Extract Password-Protected ZIP Files in Golang 1.2 without Native Support?

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage