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

mor*_*ous 156 security gzip tar bzip2 ubuntu

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

我想用密码保护文件。

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

任何人都知道如何做到这一点?

aki*_*ira 181

您必须将 unix 哲学应用于此任务:每个任务一个工具。

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

加密

 % tar cz folder_to_encrypt | \
      openssl enc -aes-256-cbc -e > out.tar.gz.enc
Run Code Online (Sandbox Code Playgroud)

解密

 % openssl enc -aes-256-cbc -d -in out.tar.gz.enc | tar xz
Run Code Online (Sandbox Code Playgroud)

或者使用 gpg

 % gpg --encrypt out.tar.gz
Run Code Online (Sandbox Code Playgroud)

openssl-variant 使用对称加密,您必须告诉接收方使用的“密码”(又名“密钥”)。gpg 变体使用对称和非对称加密的组合,您使用接收方的密钥(这意味着您不必将任何密码告诉任何人)来创建会话密钥并使用该密钥加密内容。

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

  • 对于想知道如何使用 openssl 解密文件的人:`openssl aes-256-cbc -d -in out.tar.gz.enc -out encrypted.tar.gz` (27认同)
  • @nathan.f77 该命令还显示了如何在不将它们通过管道传输到 openssl 的情况下进行操作。`openssl enc -aes-256-cbc -e -in foo.tar.gz -out bar.tar.gz.enc` (3认同)
  • @KeithSmiley 如果您有大型档案并且没有很多空间(比如它可能在 VPS 上),那么管道会更节省空间。 (3认同)
  • @eleijonmarck 提供部分“不起作用,因为 <insert-error-message-here>”... (3认同)
  • 请注意,该解决方案是 2010 年的!从那以后很多事情改变了。要在 2023 年创建正确的加密文件,您应该在命令中添加 pbkdf2 和 iter 参数,例如“openssl enc -aes-256-cbc -pbkdf2 -iter 100000”。有关这些开关的说明,请参阅 https://askubuntu.com/a/1126882/161435。 (3认同)

Ant*_*mas 38

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

zip -e <file_name>.zip <list_of_files>
Run Code Online (Sandbox Code Playgroud)

-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*
Run Code Online (Sandbox Code Playgroud)

  • Zip 文件加密在任何方面都不安全。 (13认同)
  • “您只需要知道明文的一部分(至少 13 个字节)”。这使得它比需要整个未加密文件(这已经很糟糕)更容易受到攻击。此外,zip 加密不能抵抗暴力攻击(例如开膛手杰克)。没有人应该将它用于任何严肃的事情。 (6认同)
  • @KristopherIves 它需要“另一个 ZIP 存档,其中至少包含一个 *未加密 * 形式的加密存档中的文件”才能工作。 (5认同)
  • @KristopherIves 你能详细说明不安全吗? (4认同)

小智 23

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

这些示例压缩和加密名为clear_text.

使用 gpg

$ gpg -c clear_text #Compress & Encrypt
$ gpg -d clear_text.gpg #Decrypt & Decompress
Run Code Online (Sandbox Code Playgroud)

gpg 默认会在加密前压缩输入文件,-c意思是使用带密码的对称加密。输出文件将为clear_text.gpg. 使用的好处之一gpg是使用标准的 OpenPGP 格式,因此任何支持 OpenPGP 的加密软件都能够对其进行解密。

使用 mcrypt

$ mcrypt -z clear_text #Compress & Encrypt
$ mdecrypt -z clear_text.gz.nc #Decrypt & Decompress
Run Code Online (Sandbox Code Playgroud)

-z选项压缩。默认情况下,这会输出一个名为clear_text.gz.nc.

使用 bcrypt

$ bcrypt -r clear_text #Compress & Encrypt
$ bcrypt -r clear_text.bfe #Decrypt & Decompress
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

aespipe 就是它听起来的样子,一个程序在 stdin 上输入并在 stdout 上输出 aes 加密数据。它不支持压缩,因此您可以先通过 gzip 管道输入。由于输出到标准输出,您必须将其重定向到具有您自己选择的名称的文件。可能不是执行您所要求的最有效方法,但是 aespipe 是一种多功能工具,因此我认为值得一提。


Sae*_*aeX 20

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

  • 我选择这个作为答案,因为它是唯一一个回答问题的人。问题不是如何加密消息,而是如何用密码保护档案。这就是我需要做的。(Gmail 阻止了我的服务器备份,因为它认为附件中有一些不安全的东西,我只需要添加一个密码。它不一定是安全的。) (6认同)

Ign*_*ams 8

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

  • 就像那个人说的,`-r`。 (4认同)

小智 6

创建:

tar czvf - directory | gpg --symmetric --cipher-algo aes256 -o passwordprotectedarchive.tar.gz.gpg
Run Code Online (Sandbox Code Playgroud)

它会要求您输入密码。

解密:

gpg -d passwordprotectedarchive.tar.gz.gpg | tar xzvf -
Run Code Online (Sandbox Code Playgroud)