Zip

驗證大量 zip 文件的密碼

  • March 29, 2017

我正在為客戶制定 ETL 流程。另一家供應商提供了一組大約 100 個受密碼保護的 ZIP 文件的原始數據。

我想驗證給定的密碼對於這組文件是否正確。

我目前正在使用的腳本使用循環和 7zip:

#!/bin/bash
set -x
for filename in ../TheData/*Data*of*.zip; do
       echo "Checking $filename"
       7z t -ple_super_secret_assword $filename
done

通過管道傳輸到文件的輸出如下所示:

Checking ../TheData/Project1999Data_1of7.zip
+ 7z t '-pseeeecret' ../TheData/Project1999Data_1of7.zip

7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=en_US.UTF-8,Utf16=on,HugeFiles=on,64 bits,4 CPUs Intel(R) Xeon(R) CPU E5-2470 0 @ 2.30GHz (206D7),ASM)

Scanning the drive for archives:
1 file, 632866983 bytes (604 MiB)

Testing archive: ../TheData/Project1999Data_1of7.zip

ERRORS:
Headers Error

當沒有管道執行時,會有一個進度表。我認為標題錯誤是虛假的,因為測試存檔工作和抽查一些完整的提取也似乎沒問題。

此時簡單地提取所有數據不是一種選擇,等待更改請求過程進行儲存分配。

有沒有更快的方法來簡單地確保密碼適用於一組 zip 文件?

有沒有辦法從中擷取返回碼並回顯一個簡單的通過/失敗?7zip 記錄了幾個返回碼

是否可以更改此腳本以並行執行檢查?7z 似乎只使用了一個核心的 80%,這表明它受 I/O 限制。

使用 t(測試)或 l(列表)函式,7zip 的性能似乎沒有變化。

檢查外殼錯誤/退出程式碼。

當我執行 7zip 壓縮文件(並使用密碼保護)時,

echo "now that is what I call bubba" > bubba
7z a -psecret foo bubba
rm bubba #remove for convenience

我可以執行 7zip 來嘗試提取/測試存檔的內容,但 7zip 會產生錯誤,

7z t -pnotsecret foo.7z
...
Extracting bubba    Data error in encrypted file. Wrong password?
...
Sub items Errors: 1

然後我可以檢查shell錯誤程式碼,

echo $?
2

當我提供正確的密碼時,

7z t -psecret foo.7z
...
Extracting bubba
...
Everything is Ok

然後我檢查shell錯誤程式碼,

echo $?
0

因此,您可以使用 shell 錯誤/退出程式碼來簡單地檢查密碼是否正確,或者您可以掃描 7z 的輸出並 grep -i “everything is ok”。

這是您的腳本的修訂版,

#!/bin/bash
set -x
for filename in ../TheData/*Data*of*.zip; do
   #echo "Checking $filename"
   7z t -ple_super_secret_assword $filename
   if [ $? -eq 0 ]; then echo "ok: $filename"
   else echo "error: password failed $filename"
   fi
done

引用自:https://unix.stackexchange.com/questions/354468