2018年6月16日 星期六

SHA256

如果你将下面这句话

陳女士欠鄧先生100元,立此為憑。

原封不动的抄下来(或者cut下来),然后 paste 到这个网站


你就会得到这一串符号:

B6FEB7D6C48B06A7D8A5F153998A1326FF4351891898EA853505037BA2422021

这是什么东东呢? 稍后再讲。

只要你改了一丁点,比如说鄧先生 变成 鄧生, 那整个output 都不同了:

陳女士欠鄧生100元,立此為憑。

7FBA4E1C06D88B373DB7C3B0323398C67603F4BA954E31005CBE17BAEC8B0E69

就算你输入两万言的一篇文章, 你也会得到同一长度的一串符号, 而且只要你改一个字,output 就会不同。此外,你无从去创造另一个 input 去产生同一个 output。

这个过程所得的这一串符号就叫 散列值, 英文叫 hash value. 那个SHA256 就是一个 散列函数 hash function。

 这一串符号实际上是一个很大的数字,因为太长所以用十六进来表示,所以除0到9外会有A 到 F。A就是十, B就是十一F就是十五,而10就是十六。

散列函数有什么用呢? 你上网去你的银行处理业务,所用的 password 并不会储存在 银行 的硬碟里,因为银行也怕员工或黑客偷看, 银行只会存你 password 的散列值。 当你上网登录时银行就把你 输入 的paasword 同样再算一次来比较两个 散列值 是否一样。这样银行 IT 员工或黑客偷看了这散列值也没用,他不可能倒过来去找到你的password。

当然创造这个散列函数的机构要有很高的声誉才能作这样的用途,否则当事人会宁愿自己创造一个。SHA256 只是众多常用的散列函数其中一个, 不过它来头不小,它是NSA ( 美国国家安全局 )所创 立的, 比特币的机制也用到它。

另一个应用:比如说A君有一个很重要很长的文件要发给B 君, 那A可以先把 文件 的 散列值 先发给 B,B 收到 文件后再算一次散列值去比较来保证 文件在传送中的完整和 没有被人改动过。

以前有钱人的遗嘱是交給律师保管,现在他们可以把 遗嘱 的 散列值 先告诉給他的儿女。日后他们只要把收到 遗嘱再算一次 散列值 来比较就可确定真伪。

散列函数还有其它的应用,不过那大部份都是在 IT 和密码学的范围。