Распаковать пароль zip используя golang - PullRequest
0 голосов
/ 08 октября 2018

Я пытаюсь распаковать zip-файл в golang (с паролем).

    r, err := zip.OpenReader("./path/to/the.zip")
    if err != nil {
        log.Fatal(err)
    }
    defer r.Close()

    for _, f := range r.File {
        if f.IsEncrypted() {
            f.SetPassword("$83?Lu{5nKbXxncjdH/_B)+}C`")
        }
        r, err := f.Open()
        if err != nil {
            log.Fatal(err)
        }

        buf, err := ioutil.ReadAll(r)
        if err != nil {
            log.Fatal(err)
        }
        defer r.Close()

        fmt.Printf("Size of %v: %v byte(s)\n", f.Name, len(buf))
    }

Я нахожусь в этой точке, где с помощью репозитория https://github.com/yeka/zip я получаю следующий вывод:

Size of cmxxxgapi/: 0 byte(s)
Size of cmxpi/vxxxxxxxx.yml: 326 byte(s)
Size of cmxxxpi/valxxxxxxe.yml: 379 byte(s)
Size of validations_javxxxo_mxxxxxxxon.yml: 722 byte(s)
Size of validations_xxx_mxxxxxxxxo.yml: 4322 byte(s)
Size of validations_xxxxse.yml: 65 byte(s)

Как мне распаковать все эти файлы и сделать их доступными из моего двоичного файла.

Большое спасибо.

Ps.Я не могу использовать exec.

1 Ответ

0 голосов
/ 08 октября 2018

Мне наконец удалось распаковать содержимое почтового индекса.Я не получал все файлы правильно, потому что он не отличался от путей к файлам напрямую.

Я решил это следующим образом:

r, err := zip.OpenReader("./path/to/the.zip")
if err != nil {
    log.Fatal(err)
}
defer r.Close()

for _, f := range r.File {
    if f.IsEncrypted() {
        f.SetPassword("$83?ksdfkjsdKJHJKjdH/_B)+}C`")
    }
    r, err := f.Open()
    if err != nil {
        log.Fatal(err)
    }

    buf, err := ioutil.ReadAll(r)
    if err != nil {
        log.Fatal(err)
    }
    defer r.Close()

    if f.FileInfo().IsDir() {
        // Make Folder
        os.MkdirAll(fpath, os.ModePerm)
    } else {
        ioutil.WriteFile("./sentinel/validations/"+f.Name, buf ,os.ModePerm)
    }
}
...