2013-02-21 151 views
1

我有一個用戶密碼字段,當它被保存到數據庫時,密碼被加密。C#加密密碼

此外,如果我去編輯用戶,密碼字段被哈希。

但由於加密的長度,散列字段的長度爲數百個字符。

有沒有什麼方法可能只顯示8個字符?

這是保存後顯示的內容,這並不理想。

encrypt

+1

您正在顯示密碼?給用戶? – 2013-02-21 12:56:27

+1

只有8個字符是什麼? – 2013-02-21 12:57:04

+0

我正在顯示密碼字段,以便它可以更改,也許只有8個散列圖標。 – 2013-02-21 12:59:04

回答

1

你不能讓一個單獨的選項更改密碼並在編輯用戶密碼字段顯示類似*********。如果在用戶編輯過程中,您在密碼字段中輸入新的,然後再次通過加密。

+0

如果他只存儲密碼哈希(這是事實應該如何在實際應用中)將無法「解密」密碼 – Woodman 2013-02-21 13:03:33

+0

@Woodman謝謝,更新了答案。 – Sinatr 2013-02-21 13:10:39

0

在這裏有幾件事讓我擔心,其中之一是,正如RB在評論中指出的那樣,您可以互換地使用術語加密和散列。差異非常重要。簡單來說,

  • 加密是當您在可逆轉的方式晦澀的東西。一個例子(一個不好的例子就是你)用數字1代替字母A,用數字2代替字母B等等。 「你好」會變成「7 5 12 12 15」,這對沒有鑰匙的人來說看起來毫無意義,但如果你知道怎麼做,則是可逆的。
  • 散列是一種單向數學函數,它接受輸入並將其轉換爲獨特的看似無意義的輸出。簡而言之,你幾乎可以假定進入哈希的每一條獨特信息都將作爲一個獨特的值出現。但是,鑑於這種獨特的產出,沒有辦法扭轉它,並發現輸入是什麼。

爲了進一步擴大上述情況,如果我創建了一個網站,用戶被要求註冊,我會採取他們選擇的密碼,然後我就湊那密碼,然後保存該密碼在安全的地方。然後我會丟棄用戶實際輸入的密碼。當用戶下次訪問我的網站時,他們會輸入他們的密碼,我將再次輸入密碼,然後我會檢查該輸出是否與之前保存的輸出相同,並且由於同一個單詞總是會產生相同的輸出,哈希匹配我會授予訪問我的網站。

我也敦促你找出有關醃製密碼(more on which can be found at Wikipedia)這幾乎是必須有這些天。

現在,你的實際問題。再次(我希望RB不介意擴展他的優秀評論)您在密碼字段中看到的內容(* **)只是瀏覽器隱藏您的密碼以免被窺視的一種方式。它看起來像星星的事實並不安全。此外,你只能從這個輸入字段讀取。你不應該寫信給它。在密碼字段中寫入任何內容都會讓攻擊者知道您正在使用的散列或安全性的信息。

您可以做的最好的事情就是將用戶編輯屏幕上的密碼字段留空。如果MVC爲你自動填充,那麼它向我建議你應該將輸入框的名稱改爲與你的底層對象不匹配的東西。有關MVC安全性的更多信息,請參見Microsoft's asp.net website