如何使用 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.