Maison > développement back-end > Golang > le corps du texte

Comment extraire des fichiers ZIP protégés par mot de passe dans Golang 1.2 sans support natif ?

Mary-Kate Olsen
Libérer: 2024-10-31 01:46:29
original
721 Les gens l'ont consulté

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

Extraction de fichiers ZIP protégés par mot de passe dans Golang 1.2 sans support natif

Bien que le package archive/zip de Go 1.2 fournisse des fonctionnalités ZIP de base, il manque de mécanismes pour gérer les archives protégées par mot de passe. Pour combler cette lacune, l'approche recommandée consiste à exploiter le package os/exec et à utiliser un outil externe tel que 7-zip pour effectuer l'extraction.

Utiliser 7-zip pour extraire des fichiers ZIP protégés par mot de passe.

7-zip offre des fonctionnalités de ligne de commande robustes pour manipuler les archives, y compris les fichiers ZIP protégés par mot de passe. Voici comment y parvenir dans Go en utilisant os/exec :

<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>
Copier après la connexion

Exemple de programme

Le programme Go suivant illustre l'ensemble du processus de création d'un fichier protégé par mot de passe. ZIP, en l'extrayant à l'aide de 7-zip et en vérifiant le contenu extrait :

<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>
Copier après la connexion

Remarque : Assurez-vous que 7-zip est installé sur votre système et inclus dans le chemin de votre système pour cette approche du travail.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!