如何使用 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 在两个用户之间进行通信。我们还了解了对称和非对称加密、它们的优点和缺点。
数据结构
网络
关系型数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP