跳转至

哈希函數

哈希函數(Hash Function)把消息或數據壓縮成摘要,使得數據量變小。其一般模型如下

顯然對於任何一個hash值,理論上存在若干個消息與之對應,即碰撞。

哈希函數的基本需求如下

需求 描述
輸入長度可變 hash函數可以應用於任意長度的數據
輸出長度固定 hash函數的輸出長度固定
效率 對於任意消息 x,計算 H(x) 很容易
單向性 對於任意哈希值h,想要找到滿足H(x)=h 的x在計算上不可行。
抗弱碰撞性 對於任意消息x,找到滿足另一消息y,滿足H(x)=H(y) ,在計算上不可行。
抗強碰撞性 找到任意一對滿足 H(x)=H(y) 的消息x和y在計算上不可行。
僞隨機性 哈希函數的輸出滿足僞隨機性測試標準。

散列值的目的如下

  • 確保消息的完整性,即確保收到的數據確實和發送時的一樣(即沒有修改、插入、刪除或重放),防止中間人篡改。
  • 冗餘校驗
  • 單向口令文件,比如linux系統的密碼
  • 入侵檢測和病毒檢測中的特徵碼檢測

目前的Hash函數主要有MD5,SHA1,SHA256,SHA512。目前的大多數hash函數都是迭代性的,即使用同一個hash函數,不同的參數進行多次迭代運算。

算法類型 輸出 Hash 值長度
MD5 128 bit
SHA1 160 bit
SHA256 256 bit
SHA512 512 bit