如何计算下载文件的校验和?

一、什么是校验和?

校验和是对一段数据(通常是单个文件)运行一种称为加密散列函数的算法的结果,英文名:checksum

二、为什么要计算校验和?

用于"检查"数据或文件在存储或传输过程中是否被更改。从网上下载的软件通常附带校验和,这样用户可以确保文件或文件在传输过程中没有被修改。如果来自软件供应商的校验和与计算机上下载的安装文件的校验和匹配,则没有进行任何错误或修改。如果校验和值不匹配,则下载可能已损坏或被黑客破坏。

四、怎么计算校验和?

  • 选择一个适当的哈希函数,例如MD5、SHA-1或SHA-256。
  • 将文件的内容作为输入传递给选定的哈希函数。
  • 哈希函数会计算文件内容的哈希值,并输出一个固定长度的校验和。
  • 把计算出来的结果同原始校验和比较。

五、有哪些算法可以计算校验和

MD5 (Message Digest 5)

它设计于1991年,接受输入并产生128位(即16字节)校验和,显示为32个十六进制数字。它容易受到碰撞等漏洞的影响,不像SHA(安全散列算法)家族那样安全。

SHA-1 (Secure Hash Algorithm-1)

这个哈希算法由NIST(美国国家标准与技术研究所)发布,它接受一个输入,并产生一个160位(即20字节)的输出哈希值,作为校验和。该值显示为40位十六进制字符串,自2005年以来被认为是不安全的。

SHA-2 family (Secure Hash Algorithm-2)

由NIST批准和推荐,它是一个广泛使用的算法家族,包括:

  • SHA-224和SHA-256产生256位(即32字节)校验和,显示为64位十六进制数字输出。

  • SHA-384, SHA-512, SHA-512/224, SHA-512-256 -都生成512位(即64字节)校验和,显示为128位十六进制数字字符串。

SHA-3 family (Secure Hash Algorithm-3)

也包括不同的算法,但基于一种新的加密方法,它们与之前的算法有很大不同:

  • SHA3-224 这产生一个由56个十六进制字符组成的224位(即28字节)校验和。

  • SHA3-256 这将产生一个256位(即32字节)的校验和,显示为64个十六进制字符输出。

  • SHA3-384 这将产生一个384位(即48字节)的校验和,由96个十六进制字符组成。

  • SHA-512 这将生成一个512位(即64字节)校验和,显示为128个十六进制数字输出。

CRC (cyclical redundancy check checksum algorithms) (循环冗余校验和算法)

与"传统"校验和非常相似,它们通常用于错误检测和识别数字网络和存储设备(例如以太网和Wi-Fi数据包)中数据的意外更改。基于循环码,crc使用多项式除法来确定其值。

  • CRC-16 它生成16位(即2字节)的校验和,显示为4个字符的十六进制字符串。

  • CRC-32 它生成32位(即4字节)的校验和,由8个十六进制数字组成。

  • CRC-64 它生成64位(即8字节)的校验和,显示为16个十六进制数字字符串。

六、校验和应用场景

密码存储

只保存密码的校验和值而不是明文密码更安全。这样,在数据泄露的情况下,黑客只会得到一组乱码的十六进制字符串。

保证软件/代码的完整性

防止未经授权的访问和通过修复检查过程进行的数据操作。

恶意软件防护

比较校验和值可确保下载的文档/代码/文件未被损坏或感染恶意软件。

版权图像保护

校验和可以防止第三方通过简单地修改原始图像来使用受版权保护的图像。

电子邮件恶意软件防护

当发件人的加密校验和与收件人的不匹配时,这意味着电子邮件已被篡改(例如,恶意软件已被注入电子邮件的附件)。这是一种识别可疑电子邮件和/或附件的简单而安全的方法。

ISO文件的完整性

在从下载的ISO安装Ubuntu或任何其他操作系统之前,可以在刻录CD或DVD时打开图像校验和选项。这将使您能够与您刚刚创建的CD或DVD中的一个验证下载的ISO的校验和,并帮助您避免安装损坏或感染的ISO。

七、使用电脑附带的工具来计算校验和

Windows

shell 复制代码
CertUtil -hashfile [文件路径] SHA256

或

Get-FileHash [文件路径]

Mac

shell 复制代码
shasum -a 256 [文件路径]

-a 指定算法

Linux

shell 复制代码
sha256sum [文件路径]

八、使用在线工具计算

相关推荐
neoooo2 分钟前
别慌,Java只有值传递——一次搞懂“为啥我改了它还不变”!
java·后端·spring
用户7785371836966 分钟前
一力破万法:从0实现一个http代理池
后端·爬虫
拖孩33 分钟前
微信群太多,管理麻烦?那试试接入AI助手吧~
前端·后端·微信
Humbunklung42 分钟前
Rust枚举:让数据类型告别单调乏味
开发语言·后端·rust
Y1nhl1 小时前
力扣_链表_python版本
开发语言·python·算法·leetcode·链表·职场和发展
radient1 小时前
Golang-GMP 万字洗髓经
后端·架构
蓝倾1 小时前
如何使用API接口实现淘宝商品上下架监控?
前端·后端·api
舂春儿1 小时前
如何快速统计项目代码行数
前端·后端
Pedantic1 小时前
我们什么时候应该使用协议继承?——Swift 协议继承的应用与思
前端·后端
Codebee1 小时前
如何利用OneCode注解驱动,快速训练一个私有的AI代码助手
前端·后端·面试