[英]How to save a password properly
我嘗試編寫一個程序,您可以使用該程序登錄到遠程網站。 對於某些擁有多個帳戶的人,我嘗試簡化他們的工作並將帳戶數據存儲在IsolatedStorage
。 在我的代碼的當前狀態下,只需將密碼輸入到TextBox
並在存儲密碼后立即將其轉換為MD5哈希。
現在,我想將其重構為適當的代碼,但是我被卡住了。
PasswordBox
通過PasswordBox.SecureString
和PasswordBox.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.