如何在命令行上密码保护gzip文件?


130

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

我想用密码保护文件。

执行此操作的命令是什么(我已经使用Google搜索过,但是没有发现任何显示如何使用密码创建和提取压缩文件的命令)。

有人知道该怎么做吗?

Answers:


159

您必须将unix理念应用到此任务:每个任务一个工具。

tarring和压缩是一个工作,targzipbzip2,加密是任何工作gpgopenssl

加密

 % 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使用对称加密,您必须将使用的“密码”(也称为“密钥”)告知接收方。gpg-variant结合使用了对称加密和非对称加密,您使用接收方的密钥(这意味着您不必告诉任何涉及到任何人的密码)来创建会话密钥并使用该密钥加密内容。

如果使用zip(或7z)路由:本质上与openssl-variant相同,则必须告知接收方密码。


26
对于任何想知道如何使用openssl解密文件的人:openssl aes-256-cbc -d -in out.tar.gz.enc -out decrypted.tar.gz
ndbroadbent 2013年

1
@ nathan.f77该命令还显示了如何在不将其传送到openssl的情况下执行操作。openssl enc -aes-256-cbc -e -in foo.tar.gz -out bar.tar.gz.enc
Keith Smiley 2014年

3
@KeithSmiley,如果您有大量的档案并且没有很多空间(例如可能在VPS上),则可以节省空间。
Andrew Savinykh 2014年

我似乎无法在Mac上运行它。无论如何,这有什么不同吗?
eleijonmarck '16

3
@eleijonmarck提供了“由于<insert-error-message-here>而无法工作”的部分……
akira

29

如果您只是想用密码保护文件,请通过命令行使用hand zip实用程序

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*

11
Zip文件加密绝对不安全。
Kristopher Ives

4
您可以详细说明@KristopherIves的不安全性吗?
tscizzle


4
@KristopherIves它需要“另一个ZIP归档文件,其中至少包含来自加密归档文件的未加密格式的文件之一”。
富兰克林于

4
“您只需要知道一部分明文(至少13个字节)”。这使得很多比如果要求一个完整的未加密的文件更容易(这已经是非常糟糕)。同样,zip加密不能抵抗暴力攻击(例如,使用开膛手杰克)。没有人应该将其用于任何严重的事情。
EM0

21

这是几种方法。需要注意的一件事是,如果要使用单独的压缩和加密工具,则应始终在加密之前进行压缩,因为加密的数据本质上是不可压缩的。

这些示例压缩和加密名为的文件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默认情况下,将调用输出文件。

使用gzipaespipe

$ 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上输出AES加密数据。它不支持压缩,因此您可以先通过gzip传递输入。由于输出转到stdout,因此您必须将其重定向到使用您自己选择的名称的文件。可能不是最有效的方式来完成您要问的事情,但是aespipe是一种多功能工具,因此我认为值得一提。


15

您可以使用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)。


5
我选择这个作为答案,因为它是唯一回答问题的人。问题不是如何加密消息,而是如何对存档进行密码保护。这就是我要做的。(Gmail阻止了我的服务器备份,因为它确定附件中存在一些不安全的东西,我只需要添加密码即可。它不一定是安全的。)
felwithe

7

tar,gzip或bzip2都不支持密码保护。请使用压缩格式(例如zip),或使用其他工具(例如GnuPG)对其进行加密。


嗯,这解释了为什么我无法在线找到任何东西。我想我会去拉链。
2010年

Gah !,我正在尝试递归地用passwors压缩目录,并且它仅创建一个名称为foobar的zip文件作为其中的(空)目录。这是我正在使用的命令:zip -e foobar.zip foobar。foob​​ar是当前目录中的一个非空文件夹
变形的

4
就像男人说的那样-r
伊格纳西奥·巴斯克斯

5

创建方式:

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

它将要求您输入密码。

解密:

gpg -d passwordprotectedarchive.tar.gz.gpg | tar xzvf -
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.