如何在Linux中加密文件或目录?


26

在Linux的终端中执行诸如加密文件或目录之类的最流行的命令是什么?

Answers:


31

我认为这将是gpg。文件和目录的语法有所不同。

加密

对于文件(输出filename.gpg):

gpg -c filename

对于Dirs:

gpg-zip -c -o file.gpg dirname

解密

对于文件(输出filename.gpg):

gpg filename.gpg

对于Dirs:

gpg-zip -d file.gpg

编辑:更正为@ Mk12指出加密/解密的压缩/解压缩错误。


那不应该是“加密”和“解密”吗?
mk12 2012年

没有人说过如何加密目录。
chovy

1
@chovy上面没有这样说:对于目录:gpg-zip -c -o file.gpg目录名
celebdor 2014年

@celebdor错过了那个。谢谢。编辑:这对我不起作用。解密文件时,得到一些奇怪的加密输出。
chovy 2014年

@chovy:很抱歉听到这个消息。我可以证实,加密和解密目录如上图所示为我工作,使用薄荷17下GPG-ZIP(GnuPG的)1.4.16
迈克尔Scheper

10
  • 与openssl

openssl des3 -salt -in unencrypted-data.tar -out encrypted-data.tar.des3

解密:

openssl des3 -d -salt -in encrypted-data.tar.des3 -out unencrypted-data.tar

  • 用AES加密

aescrypt -e -p password file.jpg

解密:

aescrypt -d -p password file.jpg.aes


1
+1用于显示如何使用openssl进行操作,openssl很可能是开箱即用的。
DevSolar 2012年

确实,但是3DES被认为是不安全的,不应该使用,AES(aescrypt)是更好的选择,请参见:stackoverflow.com/questions/1619212/…–
jmng


2

这是我使用openssl和tar的方法

打开加密目录:

openssl enc -aes-256-cbc -d -in ~/vault.tar.gz.dat | tar xz; thunar ~/vault

锁定加密目录:

tar cz vault/ | openssl enc -aes-256-cbc -out ~/vault.tar.gz.dat; rm -r ~/vault

1
rm -r不删除数据;它只是取消链接。您将需要使用类似的方法srm来擦除磁盘上的数据。
jbindel '16

2

我个人aescrypt主要使用。

      aescrypt -e "File" 

并解密:

      aescrypt -d "File"

还是有mcrypt:

      mcrypt "File" 

并解密:

      mcrypt -d "File"

对于目录,我建议将目录压缩后再加密。然后,在解密后,只需解压缩文件即可:

      tar -cf "Dir.tar" Dir/

并解开

      tar -xf "Dir.tar"

1

如果最高的安全性不是一个大问题(zip的手册页说zipfile实用程序使用的加密算法比PGP弱),那么我更喜欢zip和unzip。它压缩我的目录并同时加密。我更喜欢zip,因为您可以使用一种增量zip并进行加密,而不是再次对整个内容进行zip和加密。当目录大小很大时,它尤其有用。

ZIP和加密

zip file.zip file
zip -r directory.zip directory
zip --encrypt file.zip.enc file # prompt for password
zip --encrypt -r directory.zip.enc directory # prompt for password

解压缩和解密

unzip directory.zip.enc #Beware if any directory is present with the same name as the zipped file, then it would be overwritten. Hence I normally send the contents to another directory.

unzip directory.zip.enc -d directory-new # prompts for password

0

可能并不流行,但我一直在致力于通过使用一些Bash脚本以最少的用户交互来加密/解密任何内容的项目。这是指向Hak5帖子的链接,该链接解释了测试的设置。

贯穿源代码逻辑,尽管上面链接的项目可以处理的每种数据类型都会发生以下情况

_gnupg_encrypt_opts="--always-trust --armor --batch --encrypt --recipient user@host.domain"
 _bulk_output_dir="some_path"
_arbitrary_parsed_output="some_file.gpg"
## If file make encrypted time stamped file with similar name
_path_to_file="${_mapped_input}"
_path_to_output="${_bulk_output_dir}/$(date -u +%s)_${_path_to_file##*/}.gpg"
cat "${_path_to_file}" | gpg ${gpg _gnupg_encrypt_opts} > "${_path_to_output}"
## else if directory make compressed encrypted time stamped output file
_path_to_dir="${_mapped_input}"
_path_to_output="${_bulk_output_dir}/$(date -u +%s)_dir.tgz.gpg
tar -cz - "${_path_to_dir}" | gpg ${gpg _gnupg_encrypt_opts} > "${_path_to_output}"
## else if something else append encrypted output to file
_path_to_output="${_arbitrary_parsed_output}"
cat <<<"${_mapped_input}" | gpg ${gpg _gnupg_encrypt_opts} >> "${_path_to_output}"

${_mapped_input}通过读取mkfifo命名管道文件并将任何读取的内容设置为数组,mapfile -t _lines < "${_file_to_map}"然后将其扩展并保存到${_mapped_input}...有点费解,即可设置该变量,但是它允许实验功能作用于单独的行。最终结果是,您最终得到一个用于存放加密文件或压缩目录的目录,以及一个包含各种加密数据包的文件。

在具有与用于加密的公钥相关的私钥的设备上,文件或压缩目录的解密非常简单。但是解密多个装甲加密的数据包要困难一些,因此Paranoid_Pipes_Scenario_One.sh在上面的项目中编写了一个脚本,该脚本可以在用户交互最少的情况下完成所有操作。下面是普通脚本加密文件和目录的帮助程序脚本源代码的简化版本。

_gnupg_decrypt_opts="--quiet --no-tty --always-trust --passphrase-fd 9 --decrypt"
_decryption_output_dir="some_directory"
# if file
exec 9<"${_pass[@]}"
_path_to_file="${_mapped_input}"
_output_name="${_path_to_file##*/}"
_output_name="${_output_name%.gpg*}"
cat "${_path_to_file}" | gpg ${_gnupg_decrypt_opts} > "${_decryption_output_dir}/${_output_name}"
# else if compressed file
_path_to_file="${_mapped_input}"
_output_name="${_path_to_file##*/}"
_output_name="${_output_name%.tgz.gpg*}"
mkdir -p "${_decryption_output_dir}/${_output_name}"
_old_pwd="${PWD}"
cd "${_decryption_output_dir}/${_output_name}"
cat "${_path_to_file}" | gpg ${_gnupg_decrypt_opts} | tar -xzf -
cd "${_old_pwd}"
# else if non-compressed directory
_path_to_file="${_mapped_input}"
_output_name="${_path_to_file##*/}"
_output_name="${_output_name%.tar.gpg*}"
mkdir -p "${_decryption_output_dir}/${_output_name}"
_old_pwd="${PWD}"
cd "${_decryption_output_dir}/${_output_name}"
cat "${_path_to_file}" | gpg ${_gnupg_decrypt_opts} | tar -xf -
cd "${_old_pwd}"

如果您希望查看还有哪些其他功能正在以可公开验证的方式工作和测试,请查看Travis-CI构建日志(尤其是日志末尾),您会发现还有一些其他花哨的东西正在处理中几乎可以加密和解密任何数据。


0

使用FinalCrypt-坚不可摧的一次性Pad开源文件/目录加密(GUI&CLI)

它自己创建一次性键盘按键

java -cp FinalCrypt.jar rdj/CLUI --encrypt --password-prompt -k My-Key-Directory/ -t My-Test-Directory/

密码:

总共开始加密4个文件249,7 MiB

🔒“ /home/ron/My-Test-Directory/Video/Eerebegraafplaats.mp4.bit” SHA✔🖆✔🔒✔℄✔🗑✔SHA-256:“ C1E3F3A3545FEA026F3FB344F3D0798B54820B7F9AD9AAC4BE9FD1E955F947A7E7F4A9E7F7E7F7E7F43E7F7A7E7F43E7A7E7F7A7E7F7E7E7F4E7E7F7E7E7F7E7E7E7E7E7E7E7F7E7E4E7E4E7E4E7E7E3E7E3E7E3E4E3E4E7E3E4E7E3E4E7E54E7E7E54E7E7E4E7E4E7E7E7E7E7E7A54E7B home / ron /我的测试目录/视频/castle-waxjo-sweden.mp4.bit“🗝✔🖆✔🔒℄✔✔✔SHA-256:” 8AEFC9744143451F32B82BBAC6A4291BC76C747A6DA1EA024702AA51A966F810“->” 323618B2ED8A9F92F92F9F92F92F9F92F9F92F9F9F9F0F0F0F0F“ /home/ron/My-Test-Directory/Brother_HL-2170W-usaeng_quick-setup.pdf.bit”🗝✔🖆✔🔒✔℄✔🗑✔SHA-256: “0858D2D5A8CF118D40B517CD4A1F8D31D9F5A21221F75BD764B5E363FC1431FE” - > “266CE42027F891DECF109D7A9DD69E8B42C0E43D35E952BEB89F7C7EA2DBE92C” 95,7%🔒 ”/家庭/罗恩/我的试验目录/兄弟dsmobile 700d_uke_usr.pdf.bit”🗝✔🖆✔🔒✔℄✔🗑✔SHA-256: “8D718D2F29EF05BEB347D6920B3BFF5269685421B428E8D3ADFF569F67A716E0” - > “88A98D893B6D1E540039D3E9BC0B0C19B46A10A209967F3235D5DEEBF073EC1E” 100,0%

在7.3秒内完成对[4/4]文件的完全加密[249,7 MiB / 249,7 MiB](平均:34,2 MiB / s)

java -cp FinalCrypt.jar rdj/CLUI --decrypt --password-prompt -k My-Key-Directory/ -t My-Test-Directory/

密码:

开始总共解密4个文件124,9 MiB

🔓“ /home/ron/My-Test-Directory/Video/castle-waxjo-sweden.mp4”🖃✔🔓✔℄✔🗑✔SHA-256:“ 323618B7ED12A1F92D8FFB306CEEC6DFFED6862B7BF3922902E8AED29DF57ECE”->“ 8AEB974A761AFA6A1FA2AFA76A1A1FA2FA2FA1160AFA2FA6160A1FA2FA2FA2160A541AA2160A54A1160AAA6160A1160F home / ron /我的测试目录/视频/Eerebegraafplaats.mp4“🖃✔🔓✔℄✔🗑✔SHA-256:” D53FCEADDF542AC3655B547778911F786C2C2BDD327E0618A9E7F77B57792DEA“->” C1E3F3A399A9B9A9FA9B9A9FA7A9FA9A9FA9A9FE54A09A9FA7A9A54A9A9FE4A0A9FA0A9FE0A0F0A0F9A9F9A9A9FE -Directory / Brother dsmobile 700d_uke_usr.pdf“ SHA-256:🖃✔🔓✔℄✔🗑✔”“ 88A98D893B6D1E540039D3E9BC0B0C19B46A10A209967F3235D5DEEBF073EC1E”->“ 8D718D2F29EF05BB347D6920968/home/ron/My-Test-Directory/Brother_HL-2170W-usaeng_quick-setup.pdf”🖃✔🔓✔℄✔🗑✔SHA-256: “266CE42027F891DECF109D7A9DD69E8B42C0E43D35E952BEB89F7C7EA2DBE92C” - > “0858D2D5A8CF118D40B517CD4A1F8D31D9F5A21221F75BD764B5E363FC1431FE” 100,0%

在3,4秒内完成总共[124,9 MiB / 124,9 MiB]解密[4/4]文件(平均:36,3 MiB / s)

它还有一个GUI

只是想帮助社区...



FinalCrypt 5添加了自动密钥并自动创建OTP密钥,因此Scott所指的讨论不再相关
Ron de Jong

我希望看到有关其工作原理的说明,该说明技术性更高,无需花费太多精力。问题在于,一次性填充垫(1)非常适合用于数据传输,而对存储不利  而(2)应该是随机的。 如果FinalCrypt的OTP确实是随机的,则必须将它们存储起来,这会损害安全性。如果可以重新生成它们,则它们不是随机的,而是伪随机的,因此它们不是正确的OTP。…(续)
斯科特

(续)…他们在“ 自动密钥管理”页面上  指示OTP存储在“可拆卸外部(USB)驱动器上”。”“好的,那可以。但是,如果每次要解密文件时都必须连接USB驱动器(并且考虑到OTP必须至少与它加密的文件一样大),则最好将文件存储在可移动驱动器上,不用担心加密。…(续)
斯科特

(续)…而且,FinalCrypt主页面上说“大多数加密软件使用了损坏的AES ...”,但是声称AES被“损坏”似乎被夸大了。相关:为什么AES被认为是安全的?(在  密码学堆栈交换上)。
斯科特
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.