使用 OpenSSL 加密文件

LinuxBeginner
立即练习

介绍

在本实验中,你将学习如何使用 OpenSSL 进行文件加密和解密,这是网络安全领域的一项核心技能。通过动手实践,你将练习生成对称密钥并应用 AES 加密算法来保护敏感数据。

本实验将引导你完成安装 OpenSSL、创建测试文件以及执行完整的加密 - 解密循环。这些实践经验将帮助你理解现实应用中常用的基础数据保护技术。

这是一个引导实验,提供了逐步指导以帮助你学习和练习。请仔细遵循说明完成每个步骤并获得实践经验。历史数据表明,这是一个初学者级别的实验,完成率为 96%。它获得了学习者 98% 的好评率。

安装并验证 OpenSSL

在这一步中,你将安装 OpenSSL,这是一个用于实现安全通信的强大工具包。虽然大多数 Linux 发行版都预装了 OpenSSL,但这一步可以确保它已正确安装并准备就绪。

首先,通过检查版本号来验证 OpenSSL 是否已安装。

openssl version

你应该会看到类似以下的输出,显示系统中 OpenSSL 的版本信息。

OpenSSL 3.0.2 15 Mar 2022 (Library: OpenSSL 3.0.2 15 Mar 2022)

最后,你可以显示帮助菜单来查看可用命令列表,并确认 OpenSSL 运行正常。

openssl help

该命令将列出 OpenSSL 可以执行的各种加密操作,我们将在接下来的步骤中探索这些操作。

创建用于加密的示例文件

在这一步中,你将创建一个简单的文本文件,用于我们的加密和解密练习。使用一个已知内容的文件可以让我们通过对比原始内容和解密后的内容,轻松验证加密流程是否正确。

你的终端当前应该已经在 /home/labex/project 目录下。我们将在这里创建文件。

首先,使用 nano 文本编辑器创建一个名为 sample.txt 的新文件。

nano sample.txt

打开 nano 后,在编辑器中输入以下文本:

This is a sample text file for encryption testing.
LabEx Cybersecurity Lab - AES Encryption Demo.

现在,保存文件并退出 nano

  1. Ctrl + O 将更改写入文件。
  2. Enter 确认文件名(sample.txt)。
  3. Ctrl + X 退出编辑器。

为了确认文件已正确创建,使用 cat 命令显示其内容。

cat sample.txt

输出应显示你刚才输入的准确文本:

This is a sample text file for encryption testing.
LabEx Cybersecurity Lab - AES Encryption Demo.

该示例文件现在已准备好,可以进行后续步骤的加密处理。

生成对称加密密钥

在这一步中,你将生成一个对称密钥。对称密钥是一种既用于加密数据也用于解密数据的密钥。我们将使用 OpenSSL 创建一个强随机密钥,适用于 AES-256 加密,这是一种高度安全且被广泛采用的标准。

确保你位于项目目录 /home/labex/project 中。

cd ~/project

使用 openssl rand 命令生成 32 字节(256 位)的随机数据,并以十六进制格式保存到名为 symmetric_key.hex 的文件中。

openssl rand -hex 32 > symmetric_key.hex

查看生成的密钥,了解它的外观。

cat symmetric_key.hex

输出将是一个 64 字符的十六进制字符串,代表你的 256 位密钥。它看起来类似于这样(你的密钥会与之不同):

2f8b5e9a1c3d4e6f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f

由于此密钥可以解锁你的数据,因此保护它至关重要。使用 chmod 命令设置文件权限,使得只有文件所有者(即你本人)可以读取和写入该文件。

chmod 600 symmetric_key.hex

最后,使用 ls -l 验证文件权限。

ls -l symmetric_key.hex

输出应显示权限为 -rw-------,确认文件已得到保护。

-rw------- 1 labex labex 65 Nov 15 10:30 symmetric_key.hex

密钥生成并加固后,你现在可以开始加密示例文件了。

使用 AES 加密文件

现在你将使用对称密钥来加密 sample.txt。我们将使用 AES-256-CBC 加密算法。带有 256 位密钥的 AES(高级加密标准)是一种强效加密算法,而 CBC(密码分组链接)模式通过使每个加密块依赖于前一个块来增强安全性。

openssl enc 命令负责处理加密。我们需要指定算法、输入文件、输出文件以及密钥文件。

运行以下命令加密 sample.txt 并将输出保存到 sample.enc

openssl enc -aes-256-cbc -in sample.txt -out sample.enc -pass file:symmetric_key.hex
  • -aes-256-cbc:指定加密算法。
  • -in sample.txt:要加密的输入文件。
  • -out sample.enc:输出(加密后)文件的名称。
  • -pass file:symmetric_key.hex:告知 OpenSSL 使用 symmetric_key.hex 的内容作为密码(密钥)。

运行命令后,列出文件以查看新生成的加密文件 sample.enc

ls -l

你会注意到 sample.encsample.txt 稍微大一点,这是由于加密产生的额外开销(如填充和元数据)导致的。

total 12
-rw-r--r-- 1 labex labex   96 Nov 15 10:35 sample.enc
-rw-r--r-- 1 labex labex   89 Nov 15 10:20 sample.txt
-rw------- 1 labex labex   65 Nov 15 10:30 symmetric_key.hex

如果你尝试查看加密文件的内容,你会看到无法读取的二进制数据。

cat sample.enc

乱码输出确认了文件已被成功加密。

解密文件并验证完整性

在最后一步中,你将解密 sample.enc 以找回原始文本。这将确认你的密钥有效,并且整个加密 - 解密循环已成功完成。

要解密文件,你将再次使用 openssl enc 命令,但这次要带上 -d 标志来指定解密操作。

运行以下命令解密 sample.enc 并将结果保存到新文件 sample.dec 中。

openssl enc -d -aes-256-cbc -in sample.enc -out sample.dec -pass file:symmetric_key.hex

现在,让我们验证解密是否成功。检查的最佳方法是将解密后的文件(sample.dec)与原始文件(sample.txt)进行比较。diff 命令非常适合此操作。

diff sample.txt sample.dec

如果文件完全相同,该命令将不会产生任何输出,这意味着解密成功。

为了进行最后的视觉确认,显示解密文件的内容。

cat sample.dec

输出应与你原始的 sample.txt 文件完全一致:

This is a sample text file for encryption testing.
LabEx Cybersecurity Lab - AES Encryption Demo.

你现在已经成功使用 OpenSSL 加密了一个文件,并将其解密恢复为原始形式。

总结

在本实验中,你获得了使用 OpenSSL 进行文件加密和解密的实践经验。你学习了如何生成强对称密钥,如何使用它通过 AES-256 算法加密文件,以及如何解密文件以还原原始数据。这一流程是网络安全中保护敏感信息的一项基本技能。