Answers:
打包your_dir
在加密的归档文件中your_archive.tgz.gpg
(对称加密):
tar -cz your_dir | gpg -c -o your_archive.tgz.gpg
打开包装:
gpg -d your_archive.tgz.gpg | tar xz
有关如何使用非对称加密而不是对称加密的信息,请参阅GPG文档。
tar xz
在第二组命令中tar -xz
代替吗?
-
z
选项会增加太多
以下过程首先对本地磁盘上的文件进行加密,然后可以通过网络发送(或根据需要存储)
首先,生成公钥和私钥(仅执行一次):
openssl genrsa -out key.pem 2048
openssl rsa -in key.pem -out key-public.pem -outform PEM -pubout
然后,在每次备份时:
生成长随机密码,保存在文件中
echo -n "Tl4R6dnvWXiDeXr1LtpCNkyLG1" > key.txt
通过阶段加密文件
openssl enc -aes-256-cbc -pass file:key.txt < UNENCRYPTED_FILE > encrypted.dat
用公钥加密密码
openssl rsautl -encrypt -pubin -inkey key-public.pem < key.txt > enc.key.txt
然后在需要的地方保存crypto.dat和enc.key.txt。
解密:
用私钥解密加密的密码
openssl rsautl -decrypt -inkey key.pem < enc.key.txt > key.txt
解密文件
openssl enc -aes-256-cbc -d -pass file:key.txt < encrypted.dat > UNENCRYPTED_FILE
这比Florian的答案要长得多,但是我决定使用它,以便可以更好地理解该过程,而不依赖于服务器相关的GPG配置变量等。我也找不到任何有用的GPG文档。
openssl rand 32 -out key.txt
我通过非对称密钥加密来做到这一点。这意味着我有一个公共密钥(可以与任何我想发送给我的加密软件包共享),可以使我对该软件包进行加密。我还拥有一个私钥(我不共享),该私钥使我可以解密程序包。
我的用于加密当前工作目录的命令:-e用于加密,-r用于指定“收件人”或要使用的密钥,-o用于指定输出文件。
$ tar -cvz . | gpg -e -r ABCD1234 -o backup.tgz.gpg
并解密到当前工作目录:
$ gpg -d backup.tgz.gpg | tar -xz
或解密为标准tgz文件以供以后解压缩:
$ gpg -o backup.tgz -d backup.tgz.gpg
当然,这仅在我已经生成了公私钥对并将其与gpg一起安装的情况下才有效。就我而言,我使用了https://www.digitalocean.com/community/tutorials/how-to-use-gpg-to-encrypt-and-sign-messages-on-an-ubuntu上的 Digital Ocean指南-12-04-vps。加密命令中的ABCD1234指的是我系统上安装的公共密钥之一。本指南还介绍了如何共享您的公共密钥以及如何安装其他人的公共密钥来发送和接收加密文件。
GnuPG是我选择用于此过程的方法,并且因为您已指出解密步骤在不透明的地方(我同意此用法实例),所以我也一直在解决该问题。检查项目的Travis-CI构建日志,以了解当前按设计工作的功能,以及用于跟踪日志的输出的travis.yml文件。基本上,您将需要此项目中的三个脚本。keygen脚本,解密帮助程序脚本和命名管道侦听器脚本。应在将执行解密的设备上使用keygen脚本和解密帮助程序脚本,并且应在执行加密的设备上使用命名管道侦听器脚本。
设置后,加密的命名管道侦听器脚本将接受字符串,文件路径或目录路径,并以可预测的方式输出加密结果。
下面是示例命令,可以将它们放在夜间备份脚本中以进行加密以及目录压缩+加密
echo "some messages text" > /path/to/named.pipe
## Message text is ASCII armor encrypted and appended to specified file when script was stated
echo "${HOME}/Documents" > /path/to/named.pipe
## Directories are compressed with tar and encrypted with output to time stamped file in bulk output directory
echo "${HOME}/.bash_history" > /path/to/named.pipe
对于解密,你会想看看如何构建脚本.travis-ci/script_decrypt.sh
及.travis-ci/test_search_script_decrypt.sh
如何加密数据的附加字符串回收,如何批量文件/目录恢复。
当然,在进行本实验的过程中,最好不要使用主键解析(这是编写keygen脚本的原因),并且除非您对如何将其恢复为可读形式有信心,否则不应将其用于重要数据。