核心概念

哈希(hash)

/ HASH /

哈希(hash)是从任意一份数据算出来的一个简短、固定长度的「指纹」。无论喂进去的是一个单词还是一整部电影,哈希函数都吐出一串等长的字符——一个整整齐齐的小签名,用来代表那整份东西。同样的输入永远得出同样的哈希,哪怕只改动一个字母,结果也会面目全非。

有两个特性让它特别有用。第一,它是「单向」的:从数据算到哈希一瞬间就好,但你没法把它倒推回去还原出原文——指纹里并不包含那个人本身。第二,它是个可靠的摘要:如果两个文件的哈希相同,它们几乎肯定一模一样,所以你只要比对指纹、而不必逐字节核对,就能确认下载没出错。

同样的把戏也撑起了「快速查找」。哈希表(hash map)会把像「email」这样的键直接算成一个数字,告诉你该去哪个格子里找——不用一行行扫列表,算出哈希直接去取就行。这正是为什么哪怕在一个巨大的集合里,按键查东西也快得像瞬间完成。

$ echo -n "hello" | sha256sum
2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
$ echo -n "hellp" | sha256sum   # one letter off — totally different
f3c8cf2...

每次长度都一样;改动一个字母,整个指纹就全变了。

git 里像 9f2a1c3 这样的提交编号就是一个哈希——它是那个快照里全部内容的固定长度指纹。

又称
hashinghash functionchecksumdigestsha256md5