dgst 是干什么的
dgst 是 OpenSSL 里做摘要与签名的命令:既能计算普通哈希,也能算 HMAC,还能直接调用私钥签名、用公钥验签。它把散列与签名封装成一条命令,适合写进部署脚本做产物校验与文件签名。使用时要注意算法名必须写对(-sha256、-sha3-256、-sm3 等),算法名拼错时命令会直接失败。
基本信息
| 摘要 | openssl dgst -sha256 file |
|---|---|
| HMAC | openssl 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 官方渠道获取摘要。