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 演算法的輸出長度,例如 shake128 和 shake256。此選項不支援簽署作業。
對於 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 金鑰指定。下列選項由 HMAC 和 gost-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
- 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 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 取得一份副本。