2017-02-08 55 views
1

我目前正在研究一種簡單的WinForms/C#應用程序,它以結構化和一致的方式存檔數據。目標用戶不具有對存檔文件夾的寫入權限,只能使用該應用程序進行寫入。爲用戶模擬存儲密碼

由於用戶不應該獲得額外的權利,我需要爲應用程序提供一些通用服務用戶的憑據以啓動用戶模擬。因爲用戶不應該知道這些憑據,他們將不得不以某種方式存儲(我更喜歡本地,因爲我沒有使用數據庫和什麼的經驗)。 有沒有任何方法可以安全地存儲憑據,而不需要最終用戶知道/做任何有關它們的事情?或者還有其他更好的解決這個問題的方法嗎?

我知道關於密碼存儲的問題很頻繁,我盡我所能找到了我的具體問題的答案,但是我能找到的所有線程都希望存儲用戶已知的密碼。

+0

沒有什麼是絕對安全的,因爲用戶可以訪問機器和應用程序。這是關於風險與獎勵。你的用戶是否會找到密碼,如果你只是用base64編碼它並將其隱藏在應用程序設置中?如果你加密了密碼,他們能夠反編譯你的應用程序來找到密鑰?如果一個簡單的木柵欄足夠,不要浪費大量的時間來建造Fort Knox ;-) – Equalsk

+0

在我看來,我被要求爲此實現的安全級別是過度殺毒,因爲應用程序將只被使用/可用給員工,如果他們想要找到有問題的密碼,他們幾乎不必去嘗試 –

+0

App.config文件部分可以被框架加密並且無需手動解密即可訪問。你可以利用這個來存儲密碼,以免窺探者很容易發現它。雖然盧安指出認爲這樣做仍然不是最好的主意。 – pinkfloydx33

回答

2

最安全的解決方案是真正創建一個服務,它具有正確權限的用戶下運行。然後,您的Winforms應用程序就可以使用緊密的服務接口來告訴它需要做什麼。這是多麼的可行取決於你想要做什麼。

試圖做到這一點只使用winforms應用程序是棘手的。如果用戶應用程序可以做些什麼,用戶也可以做些什麼。請記住,沒有「應用程序權限」這樣的事情 - 只有用戶權限。 GUI應用程序將以一些用戶的身份運行,並且該用戶可以執行應用程序可以執行的所有操作。

+0

我第二種方法。 – Zesty

+0

我會研究創建一個服務,但我不確定這是否是我的技能水平的任何人都可以輕鬆創建。目前,讓用戶可以在該目錄下編寫代碼是一個想法,所以只使用winforms對我來說似乎合乎邏輯。 –

+0

@DominikS這是真正分離用戶權限的唯一方法。但是可能更簡單的方法對你也同樣適用 - 例如,用戶可以對文件夾擁有寫入權限,但不能擁有他不擁有的文件或目錄(例如,沒有創建)。您甚至可以擁有一個服務,在完成寫入時歸檔存檔目錄中的文件的所有權。但是,這一切都取決於您的要求是什麼 - 我們只能幫助您解決具體問題,而不是軟件設計:) – Luaan

0

您可以哈希密碼,像下面

using System.Security.Cryptography; 

public static string EncodePasswordToBase64(string password) 
{ byte[] bytes = Encoding.Unicode.GetBytes(password); 
    byte[] inArray = HashAlgorithm.Create("SHA1").ComputeHash(bytes); 
    return Convert.ToBase64String(inArray); 
} 
+2

這有幫助...怎麼樣?你如何使用哈希密碼來模擬Windows用戶? – Luaan

+0

@rishit_s這是錯誤的。單向散列用於驗證用戶輸入的密碼,以避免存儲它。您無法從哈希中生成密碼,並且需要密碼才能模擬帳戶。你可以使用加密(而不是哈希),但我會採用Luaan的方法,因爲這樣更安全。 – Zesty