天天看點

到底什麼是哈希Hash?

有次面試被問到這個問題?

我說是經過運算的一串字元串,這個回答顯然是讓人不滿意,連自己都不滿意!

但是又對其很模糊,那麼到底什麼是Hash呢?

定義

Hash一般翻譯為散列,還有音譯為哈希,本文我們統稱為哈希(這麼叫好聽,哈希=散列),通過百度以及谷歌都沒有直接找到Hash的定義,而是找到了一些相關的概念,雜湊演算法,哈希函數,哈希表等概念。

我所了解的哈希是指一個過程,這個過程就是把任意長度的輸入,通過雜湊演算法,變換成固定長度的輸出,所輸出的稱為哈希值。這個過程就是Hash!

這種變換是一種壓縮映射,也即哈希值所占的空間一般來說遠小于輸入值的空間,不同的輸入可能會哈希出相同的輸出(機率很小)。

哈希函數、算法

雜湊演算法将任意長度的二進制值映射為較短的固定長度的二進制值,這個小的二進制值稱為哈希值。

哈希值是一段資料唯一且極其緊湊的數值表示形式。如果散列一段明文而且哪怕隻更改該段落的一個字母,随後的哈希都将産生不同的值。

要找到散列為同一個值的兩個不同的輸入,在計算上是不可能的,是以資料的哈希值可以檢驗資料的完整性。一般用于快速查找和加密算法 ---《資料結構與算法分析》

哈希表

特點

  • 如果兩個哈希值是不相同的(根據同一函數),那麼這兩個散列值的原始輸入一定是不相同的。
  • 如果兩個哈希值相同,兩個輸入值很可能(極大機率)是相同的,但也可能不同,這種情況稱為“哈希碰撞”
  • 抗篡改能力:對于一個資料塊,哪怕隻改動其一個比特位,其hash值的改動也會非常大。
  • 它是一種單向函數是“非對稱”的,即它是一個從明文到密文的不可逆的映射,隻有加密過程,沒有解密過程。

繼續閱讀