校验和:它们是什么、为何重要以及在发布流水线中的位置
Source: Dev.to

当你分发软件——尤其是二进制文件时,你实际上在作出一个隐含的承诺:这个文件正是你想要发布的内容。校验和就是用来兑现这一承诺的手段。
在本文中,我们将逐一介绍校验和是什么、它们为何重要,以及如何将它们加入到你自己的开源项目中。让我们开始吧!
什么是校验和?
校验和 是使用密码学散列函数从文件内容派生的固定长度值。SHA‑256 是黄金标准,除非有特定原因使用其他算法,否则请坚持使用 SHA‑256。如果文件的哪怕一个字节发生变化,校验和就会完全改变。下载文件后,可以计算校验和并与公布的值进行比较。因此,校验和基本上是一种说明 “是的,这个程序就是它声称的那样。” 的方式。
小结…
校验和(在此上下文中)可以…
- 检测下载文件后的 损坏
- 检测下载文件后的 篡改
- 为终端用户提供信心
校验和 不能…
- 证明文件的 创建者
- 防止恶意服务器发布被篡改的文件并提供匹配的校验和
包管理器说明
你可能会想,安装了成千上万的 npm 包是否会有风险。几乎所有的包管理器都有某种安全网,在安装之前会验证下载的完整性。未通过包管理器分发的二进制文件(例如通过 GitHub releases)没有这种内置的验证,所以需要记住这一点。
Source: …
将校验和添加到你的项目
将校验和添加到开源项目其实非常简单。只要确保把它们放在正确的位置,否则将无法工作。
构建产物
↓
打包产物(tar.gz、zip、二进制文件)
↓
生成校验和
↓
发布产物 + 校验和
↓
创建发行版
我当前的项目 Doclific 使用一个单独的文件 (checksums.txt),其中每行包含校验和、两个空格,然后是对应的文件名:
a21bd2e10abbdb057e8acd91a331b5ff6e187e845031f22d0117927e276d6b4f doclific-v0.1.1-darwin-amd64.tar.gz
a8c91ead81f402e380293f9a0fa6cf56cf380782dbfdff9bc604548bf14a35da doclific-v0.1.1-darwin-arm64.tar.gz
499224f4d05f023c560978c6fff2bbb381b7425e742e0b5b3c4b54068d7f6dfb doclific-v0.1.1-linux-amd64.tar.gz
1913c0669ec383133e8460a0be9df43e285a5ebc39928e62c86fcb6c9b486665 doclific-v0.1.1-linux-arm64.tar.gz
我在 release.sh 脚本中生成该文件,该脚本会在每次创建新发行版时运行:
echo "🔐 Generating checksums"
cd "$DIST_DIR"
shasum -a 256 * > checksums.txt
当用户运行:
curl -fsSL https://raw.githubusercontent.com/muellerluke/doclific/main/scripts/install.sh | bash
时,install.sh 脚本会拉取相应的压缩包,计算其校验和,并与托管的 checksums.txt 文件进行比对:
info "Verifying checksum..."
# Determine command
if command -v sha256sum >/dev/null 2>&1; then
CHECKSUM_CMD="sha256sum -c -"
elif command -v shasum >/dev/null 2>&1; then
CHECKSUM_CMD="shasum -a 256 -c -"
else
err "No SHA256 checksum tool found. Please install sha256sum or shasum."
fi
# Run checksum verification
grep "$ARCHIVE" "$CHECKSUM_FILE" | $CHECKSUM_CMD || err "Checksum verification failed"
注意: 某些操作系统版本可能没有预装 shasum,因此脚本会在必要时回退使用 sha256sum。
结束语
如果您通过软件包管理器分发软件,通常不必担心手动校验和验证。然而,当您在软件包管理器之外分发二进制文件——使用 curl 或类似工具时——实现校验和为最终用户提供了额外的安全层和信心。