Mengekstrak Fail ZIP Dilindungi Kata Laluan dalam Golang 1.2 tanpa Sokongan Asli
Walaupun pakej arkib/zip dalam Go 1.2 menyediakan fungsi ZIP asas, ia tidak mempunyai mekanisme untuk mengendalikan arkib yang dilindungi kata laluan. Untuk mengisi jurang ini, pendekatan yang disyorkan ialah memanfaatkan pakej os/exec dan menggunakan alat luaran seperti 7-zip untuk melaksanakan pengekstrakan.
Menggunakan 7-zip untuk Mengekstrak Fail ZIP yang Dilindungi Kata Laluan
7-zip menawarkan keupayaan baris perintah yang mantap untuk memanipulasi arkib, termasuk fail ZIP yang dilindungi kata laluan. Begini cara anda boleh mencapai ini dalam Go menggunakan 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>
Contoh Program
Atur cara Go berikut menunjukkan keseluruhan proses mencipta kata laluan yang dilindungi ZIP fail, mengekstraknya menggunakan 7-zip dan mengesahkan kandungan yang diekstrak:
<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>
Nota: Pastikan 7-zip dipasang pada sistem anda dan disertakan dalam laluan sistem anda untuk pendekatan ini untuk bekerja.
Atas ialah kandungan terperinci Bagaimana untuk Mengekstrak Fail ZIP Dilindungi Kata Laluan dalam Golang 1.2 tanpa Sokongan Asli?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!