鹽(Salt),在密碼學中,是指在散列之前將散列內容(例如:密碼)的任意固定位置插入特定的字符串。這個在散列中加入字符串的方式稱爲“加鹽”。其作用是讓加鹽後的散列結果和沒有加鹽的結果不相同,在不同的應用情景中,這個處理可以增加額外的安全性。
在大部分情況,鹽是不需要保密的。鹽可以是隨機產生的字符串,其插入的位置可以也是隨意而定。如果這個散列結果在將來需要進行驗證(例如:驗證用戶輸入的密碼),則需要將已使用的鹽記錄下來。
實現原理
加鹽的實現過程通常是在需要散列的字段的特定位置增加特定的字符,打亂原始的字符串,使其生成的散列結果產生變化。比如,用戶使用了一個密碼:
x7faqgjw
經過SHA散列後,可以得出結果:
58ecbf2b3136ceda7fddfd986ba8bd8d59b2d73779691e839f3f176ce2c04b84
但是由於用戶密碼位數不足,短密碼的散列結果很容易被彩虹表破解,因此,在用戶的密碼末尾添加特定字符串(下劃線字體爲加鹽的字段):
x7faqgjwabcdefghijklmnopqrstuvwxyz
因此,加鹽後的密碼位數更長了,散列的結果也發生了變化:
7b5001a5a8bcdcfa1b64d41f6339cfa7a5c0eca04cca6ff6a6c1d6aad17794cc
以上就是加鹽過程的簡單描述,在實際使用過程中,還需要通過特定位數插入、倒序或多種方法對原始密碼進行固定的加鹽處理,使得散列的結果更加不容易被破解或輕易得到原始密碼,比如(下劃線字體爲加鹽字符串):
x7afabqgcjw