首页/安全/加密与证书速查/openssl dgst 哈希与签名验签

openssl dgst 哈希与签名验签

dgst 计算摘要、HMAC 与数字签名:支持 SHA-2、SHA-3、SM3 等算法,-sign/-verify 直接对接私钥与公钥做签名验签。

加密与证书速查安全更新于 2026-10-13

dgst 是干什么的

dgst 是 OpenSSL 里做摘要与签名的命令:既能计算普通哈希,也能算 HMAC,还能直接调用私钥签名、用公钥验签。它把散列与签名封装成一条命令,适合写进部署脚本做产物校验与文件签名。使用时要注意算法名必须写对(-sha256、-sha3-256、-sm3 等),算法名拼错时命令会直接失败。

基本信息

摘要openssl dgst -sha256 file
HMACopenssl dgst -sha256 -hmac <密钥> file
签名openssl dgst -sha256 -sign key.pem -out sig file
验签openssl dgst -sha256 -verify pub.pem -signature sig file
支持算法SHA-2、SHA-3、SM3 等,随 OpenSSL 版本扩展
参数要求签名用私钥文件,验签用对应公钥或证书

典型使用场景

  • 校验下载的安装包:与官方公布的摘要逐字符比对
  • 为发布产物签名:维护方用私钥签名,使用方用公钥验签
  • 做接口签名:双方共享密钥计算 HMAC,确认报文未被改动
  • 排查实现差异:用 abc 这类公开测试向量确认两边算出的摘要一致
  • 在持续集成里做哈希门禁:产物摘要与预期不符时中断发布

计算摘要与校验已知值

计算摘要与校验已知值
# 计算 SHA-256,输出为十六进制摘要
openssl dgst -sha256 file.bin
# 校验公开测试向量:abc 的 SHA-256 是固定值,用来确认实现正确
printf abc | openssl dgst -sha256
# 期望:ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad
# 国密散列:部分发行版需显式启用 SM3 支持
printf abc | openssl dgst -sm3
# 签名与验签:先产出签名文件,再用公钥反向验证
openssl dgst -sha256 -sign key.pem -out sig file.bin
openssl dgst -sha256 -verify pub.pem -signature sig file.bin

常见用法对照

目的命令要点注意
校验下载产物-sha256 后与官方摘要比对摘要必须来自可信渠道
消息认证码-hmac 指定共享密钥密钥不要写在命令行里
文件签名-sign 私钥 -out 签名文件私钥文件权限要收紧
验签-verify 公钥 -signature 签名文件参数顺序与名称容易写错
算法确认用 abc 之类公开向量交叉核对不同算法输出长度不同
Ed25519 签名建议用 pkeyutl -rawin;不同算法与命令组合的用法随版本演进,按官方文档核对。
HMAC 密钥走命令行参数会留在 shell 历史与进程列表中,脚本中应改用文件或环境变量传参,并确保该文件只有服务账号可读。
摘要只能证明文件未被改动,不能证明来源:攻击者可以同时替换文件与摘要。对外发布时应提供签名,或让使用方从 HTTPS 官方渠道获取摘要。

易错点

  • 把 HMAC 密钥写在命令行参数里,会泄露到 shell 历史与进程列表
  • 对 Ed25519 套用默认摘要流程,导致签名或验签报错
  • 人工肉眼比对长摘要容易看串,应让脚本做等值比较并检查退出码
  • 用摘要代替签名:攻击者能同时替换文件与摘要,必须校验来源可信的签名
  • 算法名拼错时命令直接失败,脚本里必须判断退出码而不是只看输出

数据来源与参考

  • OpenSSL 官方文档(dgst)
  • FIPS 180-4(SHA-2 测试向量)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌