PostgreSQL只有MD5加密存儲密碼。,保存密碼的最佳方法是什麼?
從閱讀黑客日誌,似乎MD5本身並不是一個非常安全的方式來存儲密碼。
我一直在客戶端使用MD5 — MD5的MD5,然後再次在數據庫—處使用MD5,但我不知道這是更強大的。
首先,是否需要加強存儲密碼?第二,什麼是簡單,有效的跨語言方法?
PostgreSQL只有MD5加密存儲密碼。,保存密碼的最佳方法是什麼?
從閱讀黑客日誌,似乎MD5本身並不是一個非常安全的方式來存儲密碼。
我一直在客戶端使用MD5 — MD5的MD5,然後再次在數據庫—處使用MD5,但我不知道這是更強大的。
首先,是否需要加強存儲密碼?第二,什麼是簡單,有效的跨語言方法?
安裝pgcrypto
擴展給你一套功能和使用的工具。 其中有能力使用bcrypt
,這是存儲密碼的好方法。
如果不在postgres中使用它,你可能會認爲它在你使用的語言之外。
相關鏈接:http://www.postgresql.org/docs/current/static/pgcrypto.html爲postgres部分和http://codahale.com/how-to-safely-store-a-password/爲動機/解釋爲什麼你想要使用它。
偉大的鏈接!謝謝! – 2011-12-28 09:32:42
啊,是的 - 很顯然,早起並沒有幫助我記憶。當用於密碼驗證時,bcrypt肯定比sha256更好(而且scrypt會更好......) – 2011-12-28 09:50:17
沒有必要在數據庫中做散列。只要你基礎的鹽對像可以在不訪問哈希密碼確定用戶名,它只是作爲安全到了在應用層面:
password_hash = sha256(user_name + password)
user_id = query("SELECT id FROM user WHERE name=? and password_hash=?",
user_name, password_hash).first()
或者你可以檢查兩個用戶名和密碼分開的步驟,並使用用戶ID作爲鹽:
user_id, password_hash = query("SELECT id, password_hash FROM user WHERE name=?",
user_name).first()
if password_hash != sha256(user_id + password):
raise Exception("authentication failed")
user_name是易失性的 - 會對usr_id工作產生影響嗎? – 2011-12-28 09:10:49
當然,這也可以工作:'user_id,password_hash = query(「SELECT id,password_hash FROM user WHERE name =?」,user_name);如果password_hash!= sha256(user_id +密碼):引發異常(「驗證失敗」)' – 2011-12-28 09:15:33
選民結束:你會介意解釋你的推理嗎? – 2011-12-28 09:02:56
對存儲過程的廣泛使用,因此在移植到應用程序級別之前,傳統上都會在db級別測試所有內容。也許你是對的 - 也許我的方法已經讓我對盲目失明瞭。 – 2011-12-28 09:09:39
當然,你也可以使用'pgcrypto':http://www.postgresql.org/docs/8.3/static/pgcrypto.html ...但如果是我,我只會在應用程序級別執行它:) – 2011-12-28 09:17:38