核心概念
哈希(hash)
/ HASH /
哈希(hash)是从任意一份数据算出来的一个简短、固定长度的「指纹」。无论喂进去的是一个单词还是一整部电影,哈希函数都吐出一串等长的字符——一个整整齐齐的小签名,用来代表那整份东西。同样的输入永远得出同样的哈希,哪怕只改动一个字母,结果也会面目全非。
有两个特性让它特别有用。第一,它是「单向」的:从数据算到哈希一瞬间就好,但你没法把它倒推回去还原出原文——指纹里并不包含那个人本身。第二,它是个可靠的摘要:如果两个文件的哈希相同,它们几乎肯定一模一样,所以你只要比对指纹、而不必逐字节核对,就能确认下载没出错。
同样的把戏也撑起了「快速查找」。哈希表(hash map)会把像「email」这样的键直接算成一个数字,告诉你该去哪个格子里找——不用一行行扫列表,算出哈希直接去取就行。这正是为什么哪怕在一个巨大的集合里,按键查东西也快得像瞬间完成。
$ echo -n "hello" | sha256sum 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 $ echo -n "hellp" | sha256sum # one letter off — totally different f3c8cf2...
每次长度都一样;改动一个字母,整个指纹就全变了。
git 里像 9f2a1c3 这样的提交编号就是一个哈希——它是那个快照里全部内容的固定长度指纹。
又称
另见