跳到正文
简体中文
工作台什么都不上传的工具
ODERSA 协会的一间工坊什么都不外传,什么都不留存,什么都到不了我们手里。

工坊 · 文件指纹

怎么用 : 文件指纹

随便放一个文件进来:它的指纹就显示出来了。把下载站公布的那一串粘进去,工具会告诉您两者是不是逐个字符完全一致。

打开工具

所谓指纹,就是根据文件内容算出来的一串六十四个字符。文件里只要改一个字节,指纹就面目全非。正因如此,它能回答一个很具体的问题:我收到的这个文件,是不是就是别人打算发给我的那个?

正经的项目会把文件的指纹公布在下载链接旁边,就是为了让您能核对。路上被弄坏的文件、中断过的下载、供着旧版本的镜像站,或者被人换掉的文件:这四种情况在指纹上都看得出来。

而指纹说不了的是:它说不了这个文件是干净的。如果您是从放着文件的那同一个页面上取的指纹,而那个页面被做了手脚,两者当然对得上,您其实什么也没验到。指纹证明的是传输忠实,不是来源诚实。

怎么用

  1. 把您的文件拖到拖放区,或者点击选择。什么类型的文件都行:工具读的是字节,它不打算看懂内容。
  2. SHA-256 指纹马上就显示出来。按那个按钮可以把它复制到剪贴板。
  3. 要核对的话:把来源公布的指纹粘到那个框里,点“比对”。工具会说两者是否一致,并指出从哪里开始不一样。

支持的格式

这件工具不看您文件的内容:它读文件的字节并做散列。所以这里没有格式清单,也不存在因为格式而出岔子的可能。

任何文件

一张图片、一个压缩包、一个安装程序、一份文档、一段视频,或者一个您认不出的文件:散列的方式都一样。这里提供的四种函数都是浏览器自己带的,不依赖任何库。

查看兼容性对照表

它的限制

每个文件 500 MB

浏览器根本不提供分块散列:必须把整个文件一次性交给它,在内存里,放在一整块连续空间上。这是网页加密接口的限制,我们验过,不是我们自己定的。再往上,内存分配会失败,标签页就死了。

不提供 MD5

浏览器算不了 MD5:它的加密接口里没有这个函数,要加上就得内嵌一个库。而且这个函数在安全用途上已经坏了二十年。如果一个来源只公布 MD5,那就把这件事当成对这个来源的一个提示。

提供 SHA-1,但标明它已经坏了

老项目还在公布它,所以得能拿来比对。但人们已经会造出两个 SHA-1 相同的不同文件了:面对一个有恶意的人,它证明不了什么。用它来发现单纯的传输错误,仍然有用。

指纹对上了,并不证明文件是干净的

它证明的是您收到的文件跟给了您指纹的那个文件一致。如果指纹和文件来自同一个页面,而这个页面被做了手脚,这次核对就是空的。好的做法是从一个跟文件相互独立的来源去取指纹。

关于这个工具的问题

我的文件会被发到什么地方吗?

不会,而且您不必听我们的。按 F12 打开浏览器的开发者工具,切到“网络”标签页,清空列表,然后把文件放进来。一行都不会冒出来。您也可以把网断掉:工具照常工作。这一点在这里格外重要:人们去算一个文件的指纹,往往恰恰是因为不信任它。

指纹到底有什么用?

它只回答一个问题:这个文件跟给了我指纹的那个,是不是字节对字节完全一样?中断过的下载、开始出坏道的硬盘、供着旧版本的镜像站、半路被换掉的文件:这些都会让指纹变样。它不说内容如何,不说质量如何,也不说文件安不安全。

为什么不提供 MD5?

因为浏览器算不了:网页加密接口里没有 MD5,要加上就得内嵌一个库。更要紧的是,这个函数从 2000 年代起就坏了:用一台普通电脑就能造出两个 MD5 相同的不同文件。一个只公布 MD5 的来源,已经说明了它有多认真。

为什么上限是 500 MB?

因为浏览器的加密接口不提供分块散列:根本没有哪个函数能让您把文件一块一块喂给它。必须把整个文件一次性交给它,放在一整块内存里。超过某个点,内存分配就会失败,标签页也就死了。要算几个 GB 的文件,装在本机上的工具仍是对的选择,而三大系统上都已经自带了相应的命令。

指纹一致,那文件就安全了吗?

不是,而这是最普遍的一个误会。指纹一致证明的是:从公布指纹的那一刻到现在,文件没有变过。如果公布指纹的那个页面跟文件一起被做了手脚,两者会完美对上,而您什么也没验到。所以只要条件允许,就到下载页面以外的地方去找指纹。

两个不同的文件会有相同的 SHA-256 指纹吗?

理论上会,因为可能的文件比可能的指纹多。实际上,还没有人造得出这样的两个文件,而且相当长时间内也没人指望能造出来。SHA-1 那边就不一样了:2017 年就已经做到了,所以您选它的时候工具会提醒您。

我的指纹是大写的,你们的是小写的。

那是同一个。指纹用十六进制书写,大小写没有任何含义。工具比对时会忽略大小写、空格、换行,以及可能跟在后面的文件名,就像下载链接旁边那些校验和文件里的写法一样。