开始使用 Linux 上的命令行加密工具
在此页
- 1 简介
- 2 使用 GPG 加密
- 2.1 GPG简介
- 2.2 使用对称密钥加密
- 2.3 公钥加密
- 2.4 为什么选择 GPG?
- 3.1 OpenSSL简介
- 3.2 生成公钥和私钥
- 3.3 加密数据
- 3.4 解密数据
1 简介
加密是以只有授权方才能读取的方式对消息或信息进行编码的过程。在我们这个数字时代几乎没有隐私,我们的数据加密是最需要的工具之一。大多数应用程序(如 gmail)都会加密我们的数据,但您系统上的数据仍然不安全,并且有黑客或未经授权的用户等待访问它们。将数据盗窃风险降至最低的一种方法是加密即使在我们本地系统上也存在的数据。
本教程演示了使用命令行工具在 Linux 系统上加密数据的几种方法。
2 使用GPG加密
2.1 GPG简介
GPG 代表 GNU Private Guard,它是一个命令行实用程序,用于使用对称或公钥加密来加密和解密数据文件或文件夹。 GPG 是 PGP 加密软件套件的 GPL 许可替代品。 OpenPGP 兼容系统也使用 GPG。
2.2 使用对称密钥加密
这里我有一个名为 \test.txt\ 的文件,我将对其进行加密然后使用对称密钥解密,并将解密后的文本打印到另一个名为 \output.txt\ 的文件中.
运行以下命令使用对称密钥加密文件 test.txt。选项“-c”表示 GPG 使用对称密钥。
gpg -c test.txt
结果如下图所示。第一次运行 GPG 时,会创建一个 .gnupg 文件夹。它包含加密过程所需的文件。然后它会要求您输入密码短语两次。请确保您输入了一个强密码并记住它,因为您将来需要用它来解密您的文件。
因此,一旦密码输入正确,就会创建一个名为 \test.txt.gpg\ 的文件。这是加密文件。下图是加密前后的文件,可以看到加密后的文本是不可读的格式。
使用以下命令解密加密文件
gpg -o output.txt test.txt.gpg
系统将提示您输入用于加密的密码。一旦您输入正确,\output.txt\ 文件将被创建,其内容与 \test.txt\ 的内容相同。解密的输出可能类似于下图:
2.3 公钥加密
这里我们将使用GPG的公/私钥加密机制对一组文件进行加密。它涉及创建一个不应与任何人共享的私钥和一个必须与想要向您发送加密数据的人共享的公钥。
首先,我们必须将文件打包到一个压缩文件夹中。这里我有一个名为\enctest\的目录,里面有三个文件test1.txt到test3.txt。我们将压缩这个目录下的tar.gz文件。我将使用以下命令创建压缩的 tar.gz 存档:
tar czf files.tar.gz ~/enctest
这将创建一个文件 \files.tar.gz\ 。我们现在必须生成公钥/私钥对。运行以下命令生成密钥:
gpg --gen-key
请记住,这只需执行一次,并且可以使用此密钥加密任意数量的文件和文件夹。输入此命令后,将询问各种问题。问题将是:
- 使用哪种加密方式?我选择了 1,即 RSA 和 RSA。
- 密钥大小应该是多少?我选择的是2048,你可以选择1024到4096范围内的任意尺寸。
- 密钥什么时候到期?我选择了 0 ,这意味着密钥永不过期。但如果您希望它在特定时间过期,可以提供几天、几周或几年。
还会询问密码短语等其他内容,系统会提示您输入两次。确保使用强密码并记住密码。您的凭据也将被使用。我在此处使用的凭据(在下面提供)仅用于测试。建议您使用真实的凭据,如姓名、电子邮件 ID 并提供一些评论。
以下内容显示了我的答案以及输出结果:
gpg (GnuPG) 1.4.16; Copyright (C) 2013 Free Software Foundation, Inc. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Please select what kind of key you want: (1) RSA and RSA (default) (2) DSA and Elgamal (3) DSA (sign only) (4) RSA (sign only) Your selection? 1 RSA keys may be between 1024 and 4096 bits long. What keysize do you want? (2048) 2048 Requested keysize is 2048 bits Please specify how long the key should be valid. 0 = key does not expire
= key expires in n days w = key expires in n weeks m = key expires in n months y = key expires in n years Key is valid for? (0) 0 Key does not expire at all Is this correct? (y/N) y You need a user ID to identify your key; the software constructs the user ID from the Real Name, Comment and Email Address in this form: "Heinrich Heine (Der Dichter) <>" Real name: John Doe Email address: Comment: tis is key generation You selected this USER-ID: "John Doe (tis is key generation) <>" Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? o You need a Passphrase to protect your secret key. 输入密码后,它就会开始生成密钥。它会要求你做一些工作。建议移动鼠标或键入内容或使用驱动器打开一些文件。它将使用这项工作来生成随机位。您可能需要多次执行此操作。我的输出如下所示:
We need to generate a lot of random bytes. It is a good idea to perform some other action (type on the keyboard, move the mouse, utilize the disks) during the prime generation; this gives the random number generator a better chance to gain enough entropy. Not enough random bytes available. Please do some other work to give the OS a chance to collect more entropy! (Need 187 more bytes) +++++ ...+++++ We need to generate a lot of random bytes. It is a good idea to perform some other action (type on the keyboard, move the mouse, utilize the disks) during the prime generation; this gives the random number generator a better chance to gain enough entropy. Not enough random bytes available. Please do some other work to give the OS a chance to collect more entropy! (Need 92 more bytes) .....+++++ Not enough random bytes available. Please do some other work to give the OS a chance to collect more entropy! (Need 114 more bytes) +++++
完成后,密钥已生成。它看起来类似于以下内容:
gpg: /home/akshay/.gnupg/trustdb.gpg: trustdb created gpg: key FA2314B6 marked as ultimately trusted public and secret key created and signed. gpg: checking the trustdb gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u pub 2048R/FA2314B6 2015-04-02 Key fingerprint = 5A02 5D77 3E0A 8B69 8086 3032 DE51 6EA5 FA23 14B6 uid John Doe (tis is key generation) <> sub 2048R/6F78E642 2015-04-02
这里有两件重要的事情:提供强密码并确保记住您的密码
现在密钥已生成,我们现在必须导出公钥文件以将其导入其他系统或通过电子邮件发送。要开始导出,请使用以下命令:
gpg --armor --output file-enc-pubkey.txt --export 'John Doe'
将 John Doe 替换为您在生成密钥时使用的名称。
还建议备份私钥。我们可以使用 gpg 来做到这一点。要进行备份,请使用以下命令:
gpg --armor --output file-enc-privkey.asc --export-secret-keys 'John Doe'
这里的文件 \file-enc-privkey.asc\ 将安全地保存私钥的备份。导出和密钥备份完成后,我们现在可以加密和解密 .tar.gz 文件。使用以下命令进行加密:
gpg --encrypt --recipient 'John Doe' files.tar.gz
记得把上面命令中的John Doe改成你在生成密钥时给的名字,否则加密会失败。当命令成功运行时,将创建一个名为 \files.tar.gz.gpg\ 的加密文件。
现在我们可以使用以下命令解密 tar.gz 存档。它将使用私钥和密码来解密并提供解密的文件夹。使用以下命令解密:
gpg --output output.tar.gz --decrypt files.tar.gz.gpg
上面的命令将要求输入密码,然后解密加密文件并创建一个名为 \output.tar.gz\ 的压缩文件,然后可以使用 tar 将其提取到文件夹以取回文件.下图显示了加密和解密命令的输出:
2.4 为什么选择 GPG?
GPG 同时支持:公钥加密和对称加密,这提供了很大的灵活性,可用于广泛的应用程序。不需要提供任何类型的敏感信息,而且 gpg 可以使用公钥拥有任意数量的加密器。用户可以从多种加密算法中进行选择。这些原因使它成为加密文件和文件夹或数据的非常有用的安全工具。
3 使用 OpenSSL 加密
3.1 OpenSSL简介
OpenSSL 项目是一项协作努力,旨在开发一个强大的、商业级的、功能齐全的开源工具包,实现安全套接字层 (SSL v2/v3) 和传输层安全 (TLS) 协议以及一个全强度的通用目的加密库。 OpenSSL 可用于大多数类 Unix 操作系统,它基于 SSLeay。 OpenSSL 还支持许多 SSH、SFTP 和 SCP 应用程序。这里我们使用 OpenSSL 通过使用非对称加密和 AES 密码来加密数据。对称加密可用于加密更大的文件或数据。
3.2 生成公钥和私钥
我们要做的第一件事是生成公钥和私钥。我们首先生成私钥。为此,请使用以下命令:
openssl genrsa -out private_key.pem 1024
上述命令指示 OpenSSL 使用 RSA 生成一个大小为 1024 字节的私钥。然后将密钥安全地存储在名为 \private_key.pem\ 的文件中。此命令的输出类似于下图:
生成私钥(秘密)后,我们可以使用它来生成公钥,以便它们形成一对。使用以下命令生成公钥:
openssl rsa -in private_key.pem -out public_key.pem -outform PEM -pubout
它将如下图所示:
3.3 加密数据
我们现在可以使用公钥来加密数据。这里我们将对文件“test.txt”进行加密,并将加密后的文本存储在文件encrypt.dat中。执行以下命令:
openssl rsautl -encrypt -inkey public_key.pem -pubin -in encrypt.txt -out encrypt.dat
下图显示了加密前后的文本文件:
3.4 解密数据
这里我们使用私钥来解密文件。运行以下命令:
openssl rsautl -decrypt -inkey private_key.pem -in encrypt.dat -out decrypt.txt
文件 decrypt.txt 将包含解密后的数据。上述命令的执行以及文件内容如下图所示:
4。结论
上面显示的方法在谨慎使用时非常安全,并且允许多个密码和安全级别以适应不同的安全级别。因此,这些中的任何一个都可以用于加密文件/文件夹和原始数据的各种场景。
5个链接
- OpenSSL
- OpenPGP