題 如何在命令行上密碼保護gzip文件?


我想在Ubuntu 10.04上使用tar命令創建一些tar.gz(可能還有tar.bz2)文件。

我想用密碼保護文件。

執行此操作的命令是什麼(我已經使用Google搜索,但沒有發現任何顯示如何使用密碼創建和提取壓縮文件)。

誰知道怎麼做?


113
2017-07-12 12:50


起源




答案:


你必須將unix-philosophy應用於這個任務:每個任務都有一個工具。

tarring和壓縮是一項工作 tar 和 gzip 要么 bzip2,加密是一項工作 gpg 要么 openssl

加密

 % tar cz folder_to_encrypt | \
      openssl enc -aes-256-cbc -e > out.tar.gz.enc

解碼

 % openssl enc -aes-256-cbc -d -in out.tar.gz.enc | tar xz

或者使用gpg

 % gpg --encrypt out.tar.gz

openssl-variant使用symetric加密,你必須告訴接收方有關使用的'密碼'(又名'密鑰')。 gpg-variant使用symetric和asymetric加密的組合,您使用接收方的密鑰(這意味著您不必告訴任何人涉及任何密碼)來創建會話密鑰並使用該密鑰加密內容。

如果你去zip(或7z)路由:基本上與openssl-variant相同,你必須告訴接收方密碼。


137
2017-07-12 13:05



對於任何想知道如何使用openssl解密文件的人: openssl aes-256-cbc -d -in out.tar.gz.enc -out decrypted.tar.gz - ndbroadbent
@ nathan.f77該命令還顯示瞭如何在不將它們輸入openssl的情況下執行操作。 openssl enc -aes-256-cbc -e -in foo.tar.gz -out bar.tar.gz.enc - Keith Smiley
@KeithSmiley如果你有大型檔案而不是很多空間(就像它可能在VPS上那樣),它的管道空間效率更高。 - Andrew Savinykh
我似乎無法在Mac上運行它。這有什麼不同嗎? - eleijonmarck
@eleijonmarck提供的部分“不起作用,因為<insert-error-message-here>”...... - akira


如果您的目的只是密碼保護文件,那麼請通過命令行使用手動拉鍊實用程序

zip -e <file_name>.zip <list_of_files>

-e要求zip實用程序加密中提到的文件

工作範例:

$ touch file_{0,1}.txt # creates blank files file_0 & file_1    
$ zip -e file.zip file_* # ask zip to encrypt
$ ENTER PASSWORD:
$ VERIFY PASSWORD:
$ ls file*

27
2018-06-17 20:12



Zip文件加密在任何方面都不安全。 - Kristopher Ives
@KristopherIves你能詳細說明不安全嗎? - tscizzle
@tscizzle unix-ag.uni-kl.de/~conrad/krypto/pkcrack/pkcrack-readme.html - Kristopher Ives
@KristopherIves它需要“另一個ZIP存檔,其中包含至少一個來自加密存檔的文件 加密 形成“工作。 - Franklin Yu
“你只需要知道明文的一部分(至少13個字節)”。這樣做 許多 比需要整個未加密文件(這已經非常糟糕)更容易受到攻擊。此外,zip加密不能抵抗暴力攻擊(例如使用Jack the Ripper)。沒有人應該將它用於任何嚴肅的事情。 - EM0


這裡有幾種方法可以做到這一點。需要注意的一點是,如果您要使用單獨的壓縮和加密工具,則應始終在加密前進行壓縮,因為加密數據基本上是不可壓縮的。

這些示例壓縮並加密一個名為的文件 clear_text

運用 gpg

$ gpg -c clear_text #Compress & Encrypt
$ gpg -d clear_text.gpg #Decrypt & Decompress

gpg默認會在加密前壓縮輸入文件, -c 意味著使用密碼進行對稱加密。輸出文件將是 clear_text.gpg。使用的一個好處 gpg 這是使用標準的OpenPGP格式,因此任何支持OpenPGP的加密軟件都能夠解密它。

運用 mcrypt

$ mcrypt -z clear_text #Compress & Encrypt
$ mdecrypt -z clear_text.gz.nc #Decrypt & Decompress

-z 選項壓縮。默認情況下,輸出一個名為的文件 clear_text.gz.nc

運用 bcrypt

$ bcrypt -r clear_text #Compress & Encrypt
$ bcrypt -r clear_text.bfe #Decrypt & Decompress

bcrypt在加密前默認壓縮, -r 選項是在輸入過程中不刪除輸入文件。調用輸出文件 clear_text.bfe 默認情況下。

運用 gzip 和 aespipe

$ cat clear_text | gzip | aespipe > clear_text.gz.aes #Compress & Encrypt
$ cat clear_text.gz.aes | aespipe -d | gunzip > clear_text #Decrypt & Decompress

aespipe聽起來像是一個程序,它在stdin上輸入並在stdout上輸出加密數據。它不支持壓縮,因此您可以先通過gzip管道輸入。由於輸出轉到stdout,您必須將其重定向到具有您自己選擇的名稱的文件。可能不是最有效的方式來做你所要求但是aespipe是一個多功能的工具,所以我認為值得一提。


15
2018-05-01 01:38





您可以使用7zip創建受密碼保護的存檔。您可以通過以下方式在命令行(或腳本)中指定密碼:

7z a -p<password> <someprotectedfile>.7z file1.txt file2.txt

7zip也可以從STDIN讀取如下:

cat <somefile> | 7z a -si -p<password> <someprotectedfile>.7z

如果必須使用zip文件,你可能想要使用 -t<type>參數(例如 -tzip)。


10
2017-10-17 09:52



我選擇這個作為答案,因為它是唯一一個回答問題的人。問題不在於如何加密消息,而是密碼保護檔案的方法。這就是我需要做的一切。 (Gmail阻止了我的服務器備份,因為它確定附件中存在不安全的東西,我只需要添加密碼。它不一定是安全的。) - felwithe


tar,gzip和bzip2都不支持密碼保護。使用壓縮格式(如zip)或使用其他工具(如GnuPG)對其進行加密。


7
2017-07-12 12:52



啊,這就解釋了為什麼我在網上找不到任何東西。我想我會去拉鍊。 - morpheous
Gah!,我試圖用passwors遞歸壓縮目錄,它只創建一個名為foobar的zip文件作為(空)目錄。這是我正在使用的命令:zip -e foobar.zip foobar。 foob​​ar是當前目錄中的非空文件夾 - morpheous
就像男人說的那樣, -r。 - Ignacio Vazquez-Abrams


創建:

tar czvf - directory | gpg --symmetric --cipher-algo aes256 -o passwordprotectedarchive.tar.gz.gpg

它會要求您輸入密碼。

解密:

gpg -d passwordprotectedarchive.tar.gz.gpg | tar xzvf -

3
2018-05-23 12:25