Shell-Script
檢查密碼是否能夠解密對稱加密的文件
我有大約 20 個用 CAST5 對稱加密的文件。我有一個用於處理所有文件的密碼片語,我希望確認它確實如此。我編寫了一個腳本來對每個文件進行檢查。
read pass for file in *.gpg ; do if ! gpg --batch --passphrase "$pass" -d "$file" &>/dev/null ; then echo "Passphrase invalid for '$file'." fi done
我檢查密碼是否對每個文件有效的方法需要解密整個文件,這非常慢。有沒有更快的方法來做我想做的事情?
不幸的是,沒有辦法詢問
gpg-agent
密鑰是否受密碼保護。但是您不需要檢查文件,每個鍵只需檢查一次。因此,您應該首先檢查涉及哪些鍵。無需兩次檢查相同的密鑰(通過使用它來解密兩個文件)。我不得不承認,雖然我認為自己是一名 GnuPG 專家,但我並沒有以優雅的方式完成這項工作,因此我剛剛在 GnuPG 郵件列表中提出了問題。當我從那裡獲得資訊時,我會編輯這個答案。
編輯 1
大師們只花了幾分鐘……解決方案是:
--list-only
gpg --status-fd 1 --list-only --list-packets file.gpg | awk '$2 == "ENC_TO" {print "0x" $3; }'
為您提供密鑰 ID。在嘗試解密文件之前,請檢查其收件人密鑰之一是否在您已檢查的密鑰列表中。
緩慢的操作是非對稱解密。儘管如此,您應該按大小對文件進行排序並從最小的開始。
上面的命令為您提供了子密鑰(如果它是為子密鑰加密的)。如果你想變得非常好,那麼你不要比較子鍵,而是比較各自的主鍵。在每個正常安裝中,主密鑰和子密鑰都具有相同的密碼(使用 GnuPG,您甚至必須努力為它們提供不同的密碼)。