OpenSSL

密码学和 SSL/TLS 工具包

openssl-dgst

名称

openssl-dgst - 执行摘要操作

语法

openssl dgst|digest [-digest] [-list] [-help] [-c] [-d] [-debug] [-hex] [-binary] [-xoflen length] [-r] [-out filename] [-sign filename|uri] [-keyform DER|PEM|P12|ENGINE] [-passin arg] [-verify filename] [-prverify filename] [-signature filename] [-sigopt nm:v] [-hmac key] [-mac alg] [-macopt nm:v] [-fips-fingerprint] [-engine id] [-engine_impl id] [-rand files] [-writerand file] [-provider name] [-provider-path path] [-propquery propq] [file ...]

描述

此命令以十六进制形式输出提供文件或文件的摘要,并使用消息摘要生成和验证数字签名。

通用名称 openssl dgst 可与指定要使用算法的选项一起使用。默认摘要为 sha256。支持的 digest 名称也可以用作子命令名称。要查看支持算法的列表,请使用 openssl list -digest-algorithms

选项

-help

打印使用消息。

-digest

指定要使用的支持摘要的名称。请参见下面的 -list 选项

-list

打印支持的消息摘要列表。

-c

以冒号分隔的两位数组打印摘要,仅在也给出 -hex 选项时才相关。

-d, -debug

打印 BIO 调试信息。

-hex

摘要将作为十六进制转储输出。这是“正常”摘要(而不是数字签名)的默认情况。有关使用 -hex 的数字签名,请参见下面的说明。

-binary

以二进制形式输出摘要或签名。

-xoflen length

设置 XOF 算法的输出长度,例如 shake128shake256。此选项不支持签名操作。

对于 OpenSSL 提供程序,建议为 shake 算法设置此值,因为默认值设置为仅提供最大安全强度的一半。

出于向后兼容性原因,shake128 的默认 xoflen 长度为 16(字节),这导致安全强度仅为 64 位。为了确保 128 位的最大安全强度,xoflen 应至少设置为 32。

出于向后兼容性原因,shake256 的默认 xoflen 长度为 32(字节),这导致安全强度仅为 128 位。为了确保 256 位的最大安全强度,xoflen 应至少设置为 64。

-r

以“coreutils”格式输出摘要,包括换行符。由 sha1sum(1) 等程序使用。

-out filename

要输出到的文件名,或默认情况下为标准输出。

-sign filename|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 filename

使用“filename”中的公钥验证签名。输出为“Verified OK”或“Verification Failure”。

-prverify filename

使用“filename”中的私钥验证签名。

-signature filename

要验证的实际签名。

-hmac key

使用“key”创建哈希 MAC。

openssl-mac(1) 命令优先于使用此命令行选项。

-mac alg

创建 MAC(带密钥的消息认证码)。最流行的 MAC 算法是 HMAC(基于哈希的 MAC),但也有其他不基于哈希的 MAC 算法,例如 gost-mac 算法,受 gost 引擎支持。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

使用特定密钥为某些 OpenSSL-FIPS 操作计算 HMAC。

-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 相关的选项。

-engine-engine_impl 选项在 OpenSSL 3.0 中已弃用。

Copyright 2000-2022 The OpenSSL Project Authors. All Rights Reserved.

根据 Apache 许可证 2.0(“许可证”)授权使用。除非符合许可证,否则您不得使用此文件。您可以在源代码分发中的 LICENSE 文件或 https://www.openssl.org/source/license.html 中获得副本。