我使用對稱加密建立了一個加密檔案。
gpg -c 50GBfile
現在我想刪除原來的。在刪除原始文件之前,我想驗證加密文件的完整性。 (類似 ZIP 檔案使用 CRC 的方式)。 gpg 是否提供了驗證對稱加密檔案內容的方法?
答案1
如果您使用 加密文件gpg -c
,則在不知道密碼的情況下無法驗證文件包含的內容。這是對稱加密的核心屬性。由於無論如何您都需要提供密碼,因此請進行真正的測試:解壓縮檔案並將其與原始檔案進行比較。在 Linux 或其他 UNIX 變體上:
gpg -d <50GBfile.gpg | cmp - 50GBfile
如果您想要額外的完整性保證,可以透過在-s
加密檔案時新增該選項,使用私鑰對檔案進行簽署。
gpg -c -s 50GBfile
然後您可以使用 驗證簽名gpg --verify 50GBfile.gpg
。請注意,這只能保證該文件是您已簽署的文件之一,並不能保護您免受簽署錯誤文件的錯誤的影響。
如果您使用非對稱加密(使用收件人的公鑰 - 您自己的公鑰),則驗證文件是否具有所需的內容將需要收件人的私鑰。對於多個收件人,任何收件人的私鑰都可以。通常,您會將自己的金鑰作為所有加密訊息的接收者,與 GPG 設定檔一起放置encrypt-to
或hidden-encrypt-to
放置在 GPG 設定檔中。
答案2
gnupg 中唯一的「驗證」操作是簽章驗證,這基本上加密了散列使用公鑰(=符號)加密檔案。
在我看來,這意味著如果在文件加密時輸出位元被損壞,則將根據損壞的文件。你永遠不會透過驗證來發現這一點簽名因為您簽署了一個已經損壞的文件,所以該文件的內容。
積極驗證加密檔案是否損壞的唯一方法似乎是經歷解密生成檔案的漫長過程並將其雜湊與原始檔案進行比較。
這就是 Sepero 上面提供的,但不是“你可以驗證一下…”它應該是「這僅有的驗證方法...”
更新 - 為了讓大家明白這一點:
幾分鐘前我就這麼做了:將一個 9.8GB 的備份檔案分割成 5 個 rar 區塊,並且每個區塊都由 gnupg 對稱加密。在刪除 rar 片段之前,我驗證了加密片段的完整性,如上所述:5 個片段中有 1 個未通過雜湊測試。我再次解密了該片段,現在解密片段的哈希值確實與原始 rar 片段相符。
我將壞的解密 rar 部分與好的解密的 rar 部分進行二進位比較,這些 2GB 檔案中的唯一差異是一個位元組:C8 與 48 - 這是由 1 位元翻轉引起的(即 11001000 與 01001000)。
這個故事的寓意是,如果在一個好的 WIN7 系統和一個好的 HDD 上,gnupg 可以在解密方面稍微翻轉一下,那麼它在加密方面也可以做到這一點。我永遠不會再跳過這個完整性驗證步驟。
答案3
您可以透過提取 md5sum 並將其與原始值進行比較來驗證它。
$ gpg -d 50GBfile | md5sum
gpg: AES256 encrypted data
gpg: gpg-agent is not available in this session
gpg: encrypted with 1 passphrase
1df1aaffb20c5255e282d6f584489993 -
$ md5sum 50GBfile
1df1aaffb20c5255e282d6f584489993 50GBfile
答案4
如果您想驗證完整性,您需要符號原始文件也是如此。
gpg --加密 --sign文件
最後您可以透過解密檔案來驗證完整性(基於簽名)(完整性會自動檢查)
gpg--解密文件.asc