亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何安全保存用戶名/密碼(本地)?

如何安全保存用戶名/密碼(本地)?

茅侃侃 2019-10-05 13:15:54
我正在制作Windows應用程序,您需要先登錄。帳戶詳細信息包含用戶名和密碼,它們需要保存在本地。這只是安全問題,因此使用同一臺計算機的其他人看不到每個人的個人數據。保存此數據的最佳/最安全的方法是什么?我不想使用數據庫,所以我嘗試了一些與資源文件有關的事情。但是,由于我對此很陌生,因此我不確定自己在做什么以及應該在哪里尋找解決方案。
查看完整描述

3 回答

?
烙印99

TA貢獻1829條經驗 獲得超13個贊

如果您只是要驗證/驗證輸入的用戶名和密碼,請使用Rfc2898DerivedBytes類(也稱為基于密碼的密鑰派生功能2或PBKDF2)。這比使用諸如Triple DES或AES之類的加密方法更安全,因為沒有實際的方法可以將RFC2898DerivedBytes的結果返回到密碼。您只能從密碼轉到結果。請參閱從密碼字符串派生加密密鑰和IV時,可以將SHA1密碼哈希用作鹽嗎?有關.Net或字符串的示例和討論,請使用密碼c#Metro Style for WinRT / Metro 進行加密/解密。


如果您要存儲密碼以供重復使用,例如將其提供給第三方,請使用Windows數據保護API(DPAPI)。它使用操作系統生成和受保護的密鑰以及三重DES加密算法來加密和解密信息。這意味著您的應用程序不必擔心生成和保護加密密鑰,這是使用加密技術時的主要問題。


在C#中,使用System.Security.Cryptography.ProtectedData類。例如,要加密一條數據,請使用ProtectedData.Protect():


// Data to protect. Convert a string to a byte[] using Encoding.UTF8.GetBytes().

byte[] plaintext; 


// Generate additional entropy (will be used as the Initialization vector)

byte[] entropy = new byte[20];

using(RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider())

{

    rng.GetBytes(entropy);

}


byte[] ciphertext = ProtectedData.Protect(plaintext, entropy,

    DataProtectionScope.CurrentUser);

安全地存儲熵和密文,例如在設置了權限的文件或注冊表項中,這樣只有當前用戶才能讀取它。要訪問原始數據,請使用ProtectedData.Unprotect():


byte[] plaintext= ProtectedData.Unprotect(ciphertext, entropy,

    DataProtectionScope.CurrentUser);

請注意,還有其他安全注意事項。例如,避免將諸如密碼之類的機密存儲為string。字符串是不可變的,因為無法在內存中通知它們,因此查看應用程序內存或內存轉儲的人可能會看到密碼。請改用SecureString或byte [],并記住在不再需要密碼時立即進行處理或清零。


查看完整回答
反對 回復 2019-10-05
?
慕雪6442864

TA貢獻1812條經驗 獲得超5個贊

DPAPI僅用于此目的。用戶首次輸入密碼時,請使用DPAPI加密密碼,并將其存儲在安全的位置(用戶注冊表,用戶應用程序數據目錄,是一些選擇)。每當啟動該應用程序時,請檢查位置以查看您的密鑰是否存在,是否使用DPAPI對其進行解密并允許訪問,否則將其拒絕。


查看完整回答
反對 回復 2019-10-05
  • 3 回答
  • 0 關注
  • 1565 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號