前言

哈希值是文件完整性校验和密码存储的基础。OpenSSL 的 dgst 命令支持多种哈希算法,比系统自带的 md5sumsha256sum 更通用。

基本语法

1
openssl dgst -算法名 文件名

支持的算法:-md5-sha1-sha224-sha256-sha384-sha512-sha3-256-blake2b512 等。

计算文件哈希

SHA-256

1
openssl dgst -sha256 /path/to/file

输出示例:

1
SHA2-256(/path/to/file)= c98c24b677eff44860afea6f493bbaec5bb1c4cbb209c6fc2bbb47f66ff2ad31

SHA-512

1
openssl dgst -sha512 /path/to/file

输出:

1
SHA2-512(/path/to/file)= 921618bc6d9f8059437c5e0397b13f973ab7c7a7b81f0ca31b70bf448fd800a460b67efda0020088bc97bf7d9da97a9e2ce7b20d46e066462ec44cf60284f9a7

MD5(不推荐用于安全场景)

1
openssl dgst -md5 /path/to/file

输出:

1
MD5(/path/to/file)= bea8252ff4e80f41719ea13cdf007273

计算字符串哈希

通过 stdin 输入:

1
echo -n "Hello, World!" | openssl dgst -sha256

输出:

1
SHA2-256(stdin)= dffd6021bb2bd5b0af676290809ec3a53191dd81c7f70a4b28688a362182986f

注意-n 去掉末尾换行符,否则哈希值会不同。

只输出哈希值

使用 -r 参数输出类似 sha256sum 格式:

1
openssl dgst -sha256 -r /path/to/file

输出:

1
c98c24b677eff44860afea6f493bbaec5bb1c4cbb209c6fc2bbb47f66ff2ad31 /path/to/file

验证文件完整性

生成哈希值

1
openssl dgst -sha256 important.tar.gz > important.tar.gz.sha256

验证

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# 保存原始哈希
EXPECTED="c98c24b677eff44860afea6f493bbaec5bb1c4cbb209c6fc2bbb47f66ff2ad31"

# 计算当前哈希
ACTUAL=$(openssl dgst -sha256 important.tar.gz | awk '{print $2}')

# 比较
if [ "$EXPECTED" = "$ACTUAL" ]; then
    echo "文件完整"
else
    echo "文件已损坏"
fi

签名与验证

生成签名

1
2
3
4
5
# 生成私钥
openssl genrsa -out private.pem 2048

# 签名
openssl dgst -sha256 -sign private.pem -out file.sig file.txt

验证签名

1
2
3
4
5
# 提取公钥
openssl rsa -in private.pem -pubout -out public.pem

# 验证
openssl dgst -sha256 -verify public.pem -signature file.sig file.txt

输出 Verified OK 表示验证通过。

算法选择建议

算法 用途 安全性
SHA-256 通用哈希、数字签名 安全
SHA-512 需要更高安全性 安全
SHA3-256 抗量子计算准备 安全
BLAKE2b 高性能场景 安全
MD5 仅用于校验和 不安全,易碰撞
SHA-1 遗留系统 不安全,已弃用

与系统命令对比

功能 OpenSSL 系统命令
SHA-256 openssl dgst -sha256 sha256sum
SHA-512 openssl dgst -sha512 sha512sum
MD5 openssl dgst -md5 md5sum
签名 openssl dgst -sign 需额外工具

OpenSSL 的优势:统一接口、支持签名、算法更全。

小结

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 文件哈希
openssl dgst -sha256 file.txt

# 字符串哈希
echo -n "text" | openssl dgst -sha256

# 签名
openssl dgst -sha256 -sign key.pem -out file.sig file.txt

# 验证签名
openssl dgst -sha256 -verify pub.pem -signature file.sig file.txt

掌握 openssl dgst,文件校验和签名验证一站式搞定。