从哈希开始

哈希似乎是个入门就学,人人都知道,但还真不一定能理解到位的知识条线。简要梳理一下最近对哈希本质的认知。

# 两个基本概念

有一类函数f(x),这类函数使得x返回均能返回特定长度的y,这种函数叫hash function,返回的y叫做hash value就是。当然这两个关键词有其他叫法,比如哈希值也可以叫digest。常见的f(x)有sha1和md5,python有一个hashlib库聚集了大量的哈希算法。

两个应用 

首先是数据存储。由于各种x都能映射成一个特定范围(长度)的y,y所能表示的所有值就像一个书橱里的所有隔层,任何一个x来了算出对应的y就找到了这个隔层。这种机制就形成了一种数据存储方式,称为hash table。从最简单的数据结构如python里的dict,set,到复杂的数据库redis的slot设计和slot内的k:v设计,都是从hash的这种特性引申的。当然所有应用这种特性设计的数据存储也都有同样的问题,当过多的x对应到了同一个y(哈希冲突),定位到某个x就会有问题了,say redis 热键。

其次就是密码学方面的应用。hash常用来校验message integrity,这方面的应用主要来自hash的一些的特点1)x发生变化往往y也发生变化,2)从y很难反推x,3)y往往比较短,4)hash function属于无秘钥算法。具体应用案例比如用md5来计算checksum校验文件的完整性,比如hash算法是hmac的重要组成部分。

最后说说想法,从具体应用角度和hash相关的名词很多纷杂,但从hash出发,想想hash的本质,也就会觉得其实各种应用其实也是很简单整齐的。

你可能感兴趣的:(从哈希开始)