本文目录导读:

通过对文件内容进行哈希计算,得到一个固定长度的“指纹”(,然后与预期的正确指纹进行比对,如果两者一致,说明文件未被篡改或损坏。
下面我为你详细介绍几种常见的脚本校验方法,覆盖不同操作系统和语言。
核心概念:哈希算法
常用的哈希算法有:
- MD5:速度快,但安全性较低(有碰撞风险),常用于简单校验。
- SHA-1:比MD5安全,但已逐渐被弃用。
- SHA-256:目前最推荐使用的,安全性高,广泛用于下载校验。
- SHA-512:更安全,但计算稍慢。
校验流程:
- 获取预期哈希值:通常在文件下载页面或官方公告中,会提供文件的哈希值(如
file.zip.sha256文件或直接给出字符串)。 - 计算本地文件的哈希值:使用脚本对本地文件进行哈希计算。
- 比对:将计算出的哈希值与预期哈希值进行字符串比较。
Linux / macOS 终端脚本
这是最直接、最常用的方法,系统自带 md5sum, sha1sum, sha256sum, sha512sum 等命令。
使用 sha256sum 校验(推荐)
#!/bin/bash
# --- 配置 ---
FILE_PATH="/path/to/your/file.iso"
EXPECTED_HASH="请在此处粘贴正确的SHA256哈希值"
# --- 计算并比对 ---
echo "正在计算文件哈希..."
CALCULATED_HASH=$(sha256sum "$FILE_PATH" | awk '{print $1}')
# 注意:sha256sum的输出格式是 "哈希值 文件名",我们用 awk 提取第一部分
if [ "$CALCULATED_HASH" = "$EXPECTED_HASH" ]; then
echo "✓ 文件校验成功!哈希值匹配。"
else
echo "✗ 文件校验失败!哈希值不匹配。"
echo "预期哈希: $EXPECTED_HASH"
echo "实际哈希: $CALCULATED_HASH"
fi
如果想使用MD5或SHA-1,只需将 sha256sum 替换为 md5sum 或 sha1sum 即可。
使用 shasum 命令(macOS 通用)
macOS 中 shasum 命令可以指定算法。
#!/bin/bash
FILE_PATH="/path/to/your/file.dmg"
EXPECTED_HASH="预期SHA256哈希值"
ALGORITHM="-a 256" # 可选: -a 1 (SHA1), -a 224, -a 256, -a 384, -a 512
CALCULATED_HASH=$(shasum $ALGORITHM "$FILE_PATH" | awk '{print $1}')
if [ "$CALCULATED_HASH" = "$EXPECTED_HASH" ]; then
echo "✓ 校验成功!"
else
echo "✗ 校验失败!"
fi
Windows PowerShell 脚本 (推荐)
PowerShell 提供了强大的文件哈希计算功能。
基础校验脚本
# 设置参数
$filePath = "C:\Downloads\your_file.zip"
$expectedHash = "正确的SHA256哈希值(大写或小写均可)"
# 计算文件哈希 (默认是 SHA256)
Write-Host "正在计算文件哈希..."
$calculatedHash = (Get-FileHash -Path $filePath -Algorithm SHA256).Hash.ToLower()
# 比对 (字符串比较,忽略大小写)
if ($calculatedHash -eq $expectedHash.ToLower()) {
Write-Host "✓ 文件校验成功!" -ForegroundColor Green
} else {
Write-Host "✗ 文件校验失败!" -ForegroundColor Red
Write-Host "预期哈希: $expectedHash"
Write-Host "实际哈希: $calculatedHash"
}
批量校验文件夹内所有文件
# 设置目录和预期哈希(这里假设有一个“哈希值:文件名”的清单文件)
$directory = "C:\Downloads"
$hashFile = "C:\Downloads\checksums.sha256"
# 读取哈希清单(每行格式:哈希值 文件名)
Get-Content $hashFile | ForEach-Object {
$parts = $_ -split '\s+', 2
$expectedHash = $parts[0]
$fileName = $parts[1]
$filePath = Join-Path $directory $fileName
if (Test-Path $filePath) {
$calculatedHash = (Get-FileHash -Path $filePath -Algorithm SHA256).Hash.ToLower()
if ($calculatedHash -eq $expectedHash.ToLower()) {
Write-Host "✓ $fileName 校验通过" -ForegroundColor Green
} else {
Write-Host "✗ $fileName 校验失败!" -ForegroundColor Red
}
} else {
Write-Host "! 文件 $fileName 不存在" -ForegroundColor Yellow
}
}
Python 脚本 (跨平台)
如果你的环境中有 Python,可以使用 hashlib 库。
import hashlib
import sys
def calculate_hash(file_path, algorithm='sha256'):
"""计算文件的哈希值"""
hash_func = hashlib.new(algorithm)
try:
with open(file_path, 'rb') as f:
# 分块读取大文件,避免内存占用过高
for chunk in iter(lambda: f.read(8192), b''):
hash_func.update(chunk)
return hash_func.hexdigest()
except FileNotFoundError:
print(f"错误:文件未找到 - {file_path}")
sys.exit(1)
except Exception as e:
print(f"错误:无法读取文件 - {e}")
sys.exit(1)
def main():
file_path = input("请输入文件路径: ")
expected_hash = input("请输入预期的哈希值: ")
algorithm = input("请输入哈希算法 (默认 sha256): ").strip().lower() or 'sha256'
print(f"正在计算 {algorithm} 哈希...")
calculated_hash = calculate_hash(file_path, algorithm)
if calculated_hash == expected_hash.lower():
print(f"✓ 校验成功!哈希值匹配。")
else:
print(f"✗ 校验失败!哈希值不匹配。")
print(f"预期哈希: {expected_hash}")
print(f"实际哈希: {calculated_hash}")
if __name__ == "__main__":
main()
使用示例:
python checksum.py # 然后按提示输入文件路径、预期哈希和算法类型
注意事项与最佳实践
- 算法选择:对于安全敏感的场景,强烈推荐使用 SHA-256 或 SHA-512,MD5和SHA-1已被证明存在碰撞攻击风险,仅适用于非安全目的的简单校验。
- 大文件处理:不要一次性读取整个文件到内存(如
f.read()),应使用分块读取(如上面Python例子中的chunk方式)。 - 哈希来源:确保你获取预期哈希值的渠道是可靠的,如果哈希值本身被篡改了,校验就失去了意义,从官方网站或受信任的镜像站获取哈希值,而不是从某个论坛链接下载。
- GPG签名校验:对于开源软件或关键文件,官方通常会提供 GPG 签名文件(
.asc后缀),除了哈希校验外,还可用 GPG 校验签名,这不仅能验证文件完整性,还能验证文件的发布者身份,是更高级的安全校验方式。gpg --verify file.iso.asc file.iso
- 编写可重复使用的脚本:建议将上述代码封装成一个函数或独立的脚本工具,方便在不同的文件校验任务中重复调用。
- Linux/macOS:直接用
sha256sum命令配合 shell 脚本。 - Windows:使用 PowerShell 的
Get-FileHash命令。 - 跨平台:Python 的
hashlib库是最灵活可靠的选择。
根据你常用的操作系统和编程环境,选择一种方法,将文件路径和预期哈希值替换成实际值即可进行校验。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播