salt鹽度與使用者密碼加密機制

來源:互聯網
上載者:User

  我們知道,如果直接對密碼進行散列,那麼駭客可以對通過獲得這個密碼散列值,然後通過查散列值字典(例如MD5密碼破解網站),得到某使用者的密碼。

  加Salt可以一定程度上解決這一問題。所謂加Salt方法,就是加點“佐料”。其基本想法是這樣的:當使用者首次提供密碼時(通常是註冊時),由系統自動往這個密碼裡撒一些“佐料”,然後再散列。而當使用者登入時,系統為使用者提供的代碼撒上同樣的“佐料”,然後散列,再比較散列值,已確定密碼是否正確。

  這裡的“佐料”被稱作“Salt值”,這個值是由系統隨機產生的,並且只有系統知道。這樣,即便兩個使用者使用了同一個密碼,由於系統為它們產生的salt值不同,他們的散列值也是不同的。即便駭客可以通過自己的密碼和自己產生的散列值來找具有特定密碼的使用者,但這個幾率太小了(密碼和salt值都得和駭客使用的一樣才行)。

下面以PHP樣本,講解md5($pass.$salt)加密函數。

<?php
function hash($a) {
    $salt=”Random_KUGBJVY”;  //定義一個salt值,程式員規定下來的隨機字串
    $b=$a.$salt;  //把密碼和salt串連
    $b=md5($b);  //執行MD5散列
    return $b;  //返回散列    
}
?>

  調用方式:$new_password=hash($_POST[password]);   //這裡接受表單提交值,並進行加密

  下面詳細介紹一下加Salt散列的過程。介紹之前先強調一點,前面說過,驗證密碼時要使用和最初散列密碼時使用“相同的”佐料。所以Salt值是要存放在資料庫裡的。

使用者註冊時,

  1. 使用者輸入【帳號】和【密碼】(以及其他使用者資訊);
  2. 系統為使用者產生【Salt值】;
  3. 系統將【Salt值】和【使用者密碼】串連到一起;
  4. 對串連後的值進行散列,得到【Hash值】;
  5. 將【Hash值1】和【Salt值】分別放到資料庫中。

使用者登入時,

  1. 使用者輸入【帳號】和【密碼】;
  2. 系統通過使用者名稱找到與之對應的【Hash值】和【Salt值】;
  3. 系統將【Salt值】和【使用者輸入的密碼】串連到一起;
  4. 對串連後的值進行散列,得到【Hash值2】(注意是即時運算出來的值);
  5. 比較【Hash值1】和【Hash值2】是否相等,相等則表示密碼正確,否則表示密碼錯誤。

有時候,為了減輕開發壓力,程式員會統一使用一個salt值(儲存在某個地方),而不是每個使用者都產生私人的salt值。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.