OpenSSL

密碼學和 SSL/TLS 工具組

openssl-dgst

名稱

openssl-dgst - 執行摘要運算

語法

openssl dgst|摘要 [-摘要] [-list] [-help] [-c] [-d] [-debug] [-hex] [-binary] [-xoflen 長度] [-r] [-out 檔名] [-sign 檔名|uri] [-keyform DER|PEM|P12|ENGINE] [-passin arg] [-verify 檔名] [-prverify 檔名] [-signature 檔名] [-sigopt nm:v] [-hmac 金鑰] [-mac 演算法] [-macopt nm:v] [-fips-fingerprint] [-engine id] [-engine_impl id] [-rand 檔案] [-writerand 檔案] [-provider 名稱] [-provider-path 路徑] [-propquery propq] [檔案 ...]

說明

此指令會輸出提供檔案或檔案的訊息摘要(以十六進位表示),也會使用訊息摘要產生和驗證數位簽章。

通用名稱 openssl dgst 可用於指定要使用的演算法選項。預設摘要為 sha256。受支援的摘要名稱也可以用作子指令名稱。若要查看受支援演算法的清單,請使用 openssl list -digest-algorithms

選項

-help

列印使用說明訊息。

-摘要

指定要使用的受支援摘要名稱。請參閱下方的選項 -list

-list

列印受支援訊息摘要的清單。

-c

以冒號分隔的兩位數群組列印摘要,僅在也提供 -hex 選項時才相關。

-d, -debug

列印 BIO 除錯資訊。

-hex

摘要要以十六進位轉儲輸出。這是「一般」摘要的預設情況,與數位簽章相反。有關使用 -hex 的數位簽章,請參閱下方的附註。

-binary

以二進位形式輸出摘要或簽章。

-xoflen 長度

設定 XOF 演算法的輸出長度,例如 shake128shake256。此選項不支援簽署作業。

對於 OpenSSL 供應商,建議對 shake 演算法設定此值,因為預設值設定僅提供一半的最大安全性強度。

基於向後相容性原因,shake128 的預設 xoflen 長度為 16 (位元組),這只會產生 64 位元的安全性強度。若要確保 128 位元的最大安全性強度,xoflen 應至少設定為 32。

基於向後相容性原因,shake256 的預設 xoflen 長度為 32 (位元組),這只會產生 128 位元的安全性強度。若要確保 256 位元的最大安全性強度,xoflen 應至少設定為 64。

-r

以「coreutils」格式輸出摘要,包括換行符號。由 sha1sum(1) 等程式使用。

-out 檔名

輸出檔名,或預設為標準輸出。

-sign 檔名|uri

使用指定的私鑰數位簽署摘要。請注意,此選項不支援 Ed25519 或 Ed448 私鑰。請改用 openssl-pkeyutl(1) 指令。

-keyform DER|PEM|P12|ENGINE

用來簽署的鑰匙格式;預設未指定。有關詳細資訊,請參閱 openssl-format-options(1)

-sigopt nm:v

在簽署或驗證作業期間,將選項傳遞給簽章演算法。這些選項的名稱和值取決於演算法。

-passin arg

私鑰密碼來源。有關 arg 格式的詳細資訊,請參閱 openssl-passphrase-options(1)

-verify 檔名

使用「檔名」中的公開鑰匙驗證簽章。輸出為「已驗證 OK」或「驗證失敗」。

-prverify 檔名

使用「檔名」中的私鑰驗證簽章。

-signature 檔名

要驗證的實際簽章。

-hmac 金鑰

使用「金鑰」建立雜湊 MAC。

建議優先使用 openssl-mac(1) 指令,而非使用此命令列選項。

-mac alg

建立 MAC(金鑰訊息驗證碼)。最熱門的 MAC 演算法是 HMAC(基於雜湊的 MAC),但還有其他不基於雜湊的 MAC 演算法,例如由 gost 引擎支援的 gost-mac 演算法。MAC 金鑰和其他選項應透過 -macopt 參數設定。

建議優先使用 openssl-mac(1) 指令,而非使用此命令列選項。

-macopt nm:v

傳遞選項給 MAC 演算法,由 -mac 金鑰指定。下列選項由 HMACgost-mac 支援

key:string

將 MAC 金鑰指定為字母數字字串(僅當金鑰包含可列印字元時使用)。字串長度必須符合 MAC 演算法的任何限制,例如 gost-mac 的確切 32 個字元。

hexkey:string

以十六進位形式指定 MAC 金鑰(每個位元組兩個十六進位數字)。金鑰長度必須符合 MAC 演算法的任何限制,例如 gost-mac 的確切 32 個字元。

建議優先使用 openssl-mac(1) 指令,而非使用此命令列選項。

-fips-fingerprint

使用特定金鑰計算 HMAC,用於某些 OpenSSL-FIPS 作業。

-rand files, -writerand file

請參閱 openssl(1) 中的「隨機狀態選項」 以取得詳細資訊。

-engine id

請參閱 openssl(1) 中的「引擎選項」。此選項已棄用。

除非使用 -engine_impl 選項或將其設定為這樣做,否則引擎不會用於摘要,請參閱 config(5) 中的「引擎設定模組」

-engine_impl id

-engine 選項一起使用時,指定也使用引擎 id 進行摘要作業。

-provider name
-provider-path path
-propquery propq

請參閱 openssl(1) 中的「提供者選項」provider(7)property(7)

file ...

要摘要的檔案或檔案。如果未指定任何檔案,則使用標準輸入。

範例

建立檔案的十六進位編碼訊息摘要

openssl dgst -md5 -hex file.txt
or
openssl md5 file.txt

使用 SHA-256 對檔案進行簽章,並以二進位檔案輸出

openssl dgst -sha256 -sign privatekey.pem -out signature.sign file.txt
or
openssl sha256 -sign privatekey.pem -out signature.sign file.txt

驗證簽章

openssl dgst -sha256 -verify publickey.pem \
-signature signature.sign \
file.txt

注意事項

可用的摘要機制會根據建置 OpenSSL 時使用的選項而有所不同。可以使用 openssl list -digest-algorithms 指令列出它們。

新的或敏捷的應用程式可能應該使用 SHA-256。其他摘要,特別是 SHA-1 和 MD5,仍廣泛用於與現有格式和協定互通。

在簽章檔案時,此指令會根據私鑰的 ASN.1 資訊自動判斷要使用的演算法(RSA、ECC 等)。在驗證簽章時,它只處理 RSA、DSA 或 ECDSA 簽章本身,而不處理相關資料以識別簽署者和用於 x.509、CMS 和 S/MIME 等格式的演算法。

某些簽署演算法需要亂數來源,特別是 ECDSA 和 DSA。

僅在簽署或驗證單一檔案時,才應使用簽署和驗證選項。

無法使用 openssl 驗證十六進位簽章。請改用「xxd -r」或類似程式,將十六進位簽章轉換為二進位簽章,再進行驗證。

建議使用 openssl-mac(1) 指令,而非 -hmac-mac-macopt 命令列選項。

另請參閱

openssl-mac(1)

歷程

OpenSSL 1.1.0 已將預設摘要從 MD5 變更為 SHA256。OpenSSL 1.1.0 已移除與 FIPS 相關的選項。

OpenSSL 3.0 已棄用 -engine-engine_impl 選項。

版權所有 2000-2022 OpenSSL 專案作者。保留所有權利。

根據 Apache 授權條款 2.0(「授權條款」)授權。您不得違反授權條款使用此檔案。您可以在原始程式碼散佈中的 LICENSE 檔案或 https://www.openssl.org/source/license.html 取得一份副本。