哈希值是文件完整性校验和密码存储的基础。OpenSSL 的 dgst 命令支持多种哈希算法,比系统自带的 md5sum、sha256sum 更通用。
基本语法#
支持的算法:-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,文件校验和签名验证一站式搞定。