如何使用 OpenSSL 加密大文件?


OpenSSL

OpenSSL 是一款用于通用加密和安全通信的宝贵工具,它可以执行各种任务,包括加密文件。大多数 Linux 发行版默认安装了该工具;如果没有,您可以使用软件包管理器安装它。

在使用 OpenSSL 加密文件之前,让我们先了解一下加密的基本知识。

加密是一种对消息进行编码以保护其内容免受窥探的方法。一般来说,有两种类型:

  • 对称或秘密密钥加密

  • 非对称或公钥加密

秘密密钥加密使用相同的密钥进行加密和解密,而公钥加密使用不同的密钥进行加密和解密。

每种方法都有其优点和缺点。公钥加密比秘密密钥加密更安全,因为它解决了安全共享密钥的问题,而秘密密钥加密比公钥加密更快。

将它们结合使用可以最大限度地发挥每种类型的优势。

公钥加密

公钥加密使用两组密钥,称为密钥对。

  • 公钥

  • 私钥

公钥可以自由地与您希望秘密通信的任何人共享。私钥应保密,切勿共享。

加密使用公钥执行。如果您想与某人共享敏感信息,您可以发送您的公钥,以便他们在发送给您之前加密消息或文件。解密通过私钥完成,您只能使用您的私钥解密发送者的加密消息。

使用 OpenSSL 加密文件

假设有两个用户 Sachin 和 Mohit,他们希望通过使用 OpenSSL 交换加密文件来互相通信。

在加密文件之前,您必须先生成一对密钥。您还需要一个密码短语,每次使用 OpenSSL 时都需要记住它,因此请确保记住它。

Sachin 使用以下命令生成他的密钥对:

$ openssl genrsa -aes128 -out sachin_private.pem 1024
[root@localhost ~]# openssl genrsa -aes128 -out sachin_private.pem 1024
Generating RSA private key, 1024 bit long modulus
.....................................++++++
....++++++
e is 65537 (0x10001)
Enter pass phrase for sachin_private.pem:
Verifying - Enter pass phrase for sachin_private.pem:
[root@localhost ~]#

此命令使用 OpenSSL 的“genrsa”命令生成 1024 位公钥/私钥对。

它还使用 aes128(一种对称密钥算法)来使用 genrsa 生成的私钥对 Sachin 生成的私钥进行加密。

[root@localhost ~]# ls -l sachin_private.pem
-rw-r--r--. 1 root root 986 Sep 23 21:21 sachin_private.pem
[root@localhost ~]# file sachin_private.pem
sachin_private.pem: PEM RSA private key
[root@localhost ~]#

Mohit 将遵循相同的步骤创建他的密钥对。

openssl genrsa -aes128 -out mohit_private.pem 1024
[root@localhost ~]# openssl genrsa -aes128 -out mohit_private.pem 1024
Generating RSA private key, 1024 bit long modulus
........++++++
..............................++++++
e is 65537 (0x10001)
Enter pass phrase for mohit_private.pem:
Verifying - Enter pass phrase for mohit_private.pem:
[root@localhost ~]#

提取公钥

Sachin 必须提取他的公钥并使用以下命令将其保存到文件中:

openssl rsa -in sachin_private.pem -pubout > sachin_public.pem

输入 sachin_private.pem 的密码短语

正在写入 RSA 密钥

Mohit 可以遵循相同的步骤提取公钥。

交换公钥

在他们互相交换公钥之前,公钥对两个用户都没有用。有许多方法可以共享公钥。使用 scp 命令将公钥复制到彼此的工作站是其中一种方法。

如果您想将 Sachin 的公钥发送到 Mohit 的工作站,您可以执行以下命令:

scp sachin_public.pem mohit@mohit-machine-or-ip:/path/

要将 Mohit 的公钥发送到 Sachin 的工作站,请执行以下命令:

scp mohit_public.pem sachin@sachin-machine-or-ip:/path/

现在 Sachin 有了 Mohit 的公钥,反之亦然。

使用公钥交换加密消息

Sachin 需要使用 openssl -encrypt 命令来加密此秘密消息。他必须为工具提供三个输入:

  • 包含秘密消息的文件名

  • Mohit 的公钥(文件)

存储加密消息的文件名

您可以使用以下命令加密消息。

openssl rsautl -encrypt -inkey mohit_public.pem -
pubin -in file_name.txt -out file_name.enc

注意 - 如果您的 openssl 版本为 3.0 或更高版本,请使用 pkeyutl 代替 rsautl,其余参数保持不变。

您可以使用 scp 命令将此文件发送到 Mohit 的工作站,如果他使用通常的方法读取它,他将无法读取此文件。他需要三个信息来解密消息。

加密文件

他的私钥

保存解密输出的文件名

Openssl rsautl -decrypt -inkey mohit_private.pem -
in file_name.enc > file_name.txt

现在 Mohit 可以读取 Sachin 发送给他的文件了。

结论

我们可以说 OpenSSL 是一个程序和库,它支持许多加密功能:

  • 对称密钥生成

  • 公钥/私钥对生成

  • 公钥加密

  • 哈希函数

  • 证书创建等等。

在本文中,我们了解了如何使用 OpenSSL 加密大文件。我们了解了如何以安全的方式发送文件以及如何使用 OpenSSL 在两个用户之间进行通信。我们还了解了对称和非对称加密、它们的优点和缺点。

更新于:2022 年 11 月 21 日

1K+ 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.