簡體   English   中英

如何正確保存密碼

[英]How to save a password properly

我嘗試編寫一個程序,您可以使用該程序登錄到遠程網站。 對於某些擁有多個帳戶的人,我嘗試簡化他們的工作並將帳戶數據存儲在IsolatedStorage 在我的代碼的當前狀態下,只需將密碼輸入到TextBox並在存儲密碼后立即將其轉換為MD5哈希。

現在,我想將其重構為適當的代碼,但是我被卡住了。

PasswordBox通過PasswordBox.SecureStringPasswordBox.Password公開其數據。

因此,當點擊我的保存按鈕時,我會執行類似

public void OnClick(...)
{
    var password = passwordBox.Password;
    // store it somehow (e.g. custom MD5 encryption)

    var savePassword = passwordBox.SecureString;
    // store this string somehow, but how?
}

這是我的問題

  • 將我的PasswordBox的普通密碼放入var password ,內存中是否有可見的東西? 某些黑客能夠通過反射/調試使此簡單值可見嗎? 哪個代碼使這些字符串實際可見? 我需要注意什么?
  • 如何處理PasswordBox SecureString

我對所有這些東西有點不知所措,但是我還無法弄清楚如何正確處理應用程序中密碼的本質。

我不要求整個解決方案和運行代碼。 如果有人可以幫助我,我會很高興。 而且,我也不需要企業解決方案。 我只是在尋找一種,它易於實現,並且盡可能節省我投入的精力。

您真的需要密碼可逆嗎?

一種更安全的存儲方法是將其鹽腌和散列。

用戶: JOHN

密碼:(開頭為) myUserPassword667!

然后針對數據庫中的用戶使用某種數據庫唯一代碼。 假設一個GUID。

現在,您有abcd-1234-12-1212121ab作為JOHN的唯一化器

這樣您現在有了基本密碼(在散列之前)

myUserPassword667!abcd-1234-12-1212121ab

現在,您可以使用System.Security命名空間中的SHA或其他哈希算法之一對其進行哈希處理。

現在,您內部已將一些Salt應用於哈希算法...(僅部分代碼)

MySecretSaltWords559BC

然后將結果存儲為DB64或Base64。

Ab09l\\311sas== (簡體)

下次用戶登錄時,您會在數據庫中找到他們的記錄,您會獲得生成帳戶時使用的唯一代碼,並將其附加到他們輸入的密碼上。

使用相同的技術對輸入的密碼進行哈希處理,然后對結果進行二進制比較,那么您就不必存儲其密碼了。 如果哈希值不匹配,則您沒有相同的密碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM