文件哈希值计算
一次得到文件或字符串的所有校验和,粘贴期望值就能一眼看出是否一致。
把文件拖到这里
· 最大300 MB
更多设置收起设置
如何计算哈希值
- 1
拖入文件或粘贴文本
一次最多五十个文件,也可以直接输入字符串。大文件分块读取,内存占用保持平稳。
- 2
选择要显示的算法
默认四种全选。选得越少,创建的哈希计算器越少,处理几GB的大文件时,速度提升可以实际测出来。
- 3
核对或复制结果
粘贴期望的校验和,工具会按长度识别对应的算法并替你核对。
数据只读一遍,而不是四遍
要得到四个校验和,最直接的办法是把文件读四遍。这里文件只读一遍,按十六MB分块,每一块先交给所有选中的哈希计算器,再读下一块,所以多加一种算法只多花处理器时间,不会再完整读一遍磁盘。分块读取对内存上限也很关键:两GB的文件从不会整个放进内存,每次只有十六MB,正因如此,在浏览器标签页里计算大型ISO镜像或视频的哈希值才真正可行。
什么场景用什么算法
要确认下载的文件完好无损,四种都可以,因为意外损坏不会制造碰撞,用发布者列出的那一种就行。如果有人可能故意构造一个匹配的文件,MD5和SHA-1都已经被攻破:MD5存在实用的碰撞攻击,SHA-1自2017年起也是如此,所以MD5一致已经不能证明两个文件相同。需要抵御攻击者的完整性校验,SHA-256是合理的默认选择;SHA-512实际上并不更安全,但在64位硬件上往往更快。这几种都不该用来存储密码,密码需要Argon2或bcrypt这类刻意设计得很慢的函数。
文本的哈希值取决于编码
哈希值是对字节计算的,字符串只有经过编码才变成字节。“Привет”这个词按UTF-8得到一个SHA-256,按UTF-16LE得到的则完全不同,两者都没错,它们是不同字节序列的哈希值。所以字符集是一项明确的选择,而不是默认假设;你在别处算出的哈希值,在编码一致之前可能和这里对不上。默认是UTF-8,因为几乎所有现代系统说的“文本”指的都是它。
文件不会上传
哈希计算完全在这个浏览器标签页中运行。核对校验和的意义在于信任文件本身,而不是信任某个服务,把文件发到服务器去计算就失去了意义。没有任何内容离开你的设备。
常见问题
验证下载文件该用哪种算法?
用发布者公布的那一种。只防意外损坏时四种都够用;担心有人故意篡改时,用SHA-256或SHA-512,因为MD5和SHA-1都存在实用的碰撞攻击。
为什么MD5不适合存储密码?
因为它快,而速度正是猜密码的攻击者想要的。存储密码需要Argon2或bcrypt这类刻意放慢、加盐的函数;普通哈希不管快慢都不是合适的工具。
为什么文本的哈希值会随编码变化?
因为哈希针对的是字节而不是字符,UTF-8和UTF-16LE会把同一个字符串变成不同的字节。选择与生成对比值的那个程序相同的编码。
能计算超大文件的哈希值吗?
能。文件按十六MB分块读取,从不会整个放进内存,所以几GB的文件也能处理,内存占用远低于一百MB。
哈希值不一致说明什么?
说明这些字节和发布者计算哈希值时的不同。通常是下载被截断或损坏,从源头重新下载;如果仍然不一致,就把这个文件当作不可信。
核对时怎么知道我粘贴的是哪种算法?
看长度。32、40、64或128个字符的十六进制校验和,分别对应MD5、SHA-1、SHA-256或SHA-512。其他长度会提示无法识别,而不是拿去和错误的值比较。
核对时文件会上传吗?
不会。所有计算都在你的浏览器中本地完成,使用WebAssembly哈希库,全程不涉及服务器。