![](/img/trans.png)
[英]Is there a way to encrypt the configuration file of a Windows Forms application?
[英]How can a user encrypt a configuration file to be used by a service application?
好的,我問一個特定問題的相當普遍的問題。 我用更多的方式搜索了這個,而且似乎沒什么用。 讓我解釋一下我的需求,然后我會提到一些我找到的最佳解決方案,以及為什么它們在我的情況下不起作用。
我有一個用戶啟動並用於設置保存到app.config
文件中的各種配置值的應用程序。 這是一個WPF應用程序。 具體而言,這些數據中的一些非常敏感。
此數據需要加密,然后由配置步驟完成后由應用程序啟動的Windows服務解密。 給出這種情況的一般解決方案是使用DPAPI,它有兩種加密模式:用戶和本地機器。
如果使用用戶級加密, 只要最初加密數據的當前用戶正在進行解密 ,您的應用程序就會根據需要對數據進行加密和解密 。 我的問題是,當服務啟動時,它也會在重新啟動時重新啟動,並且將特別在不同的用戶帳戶下運行。
使用DPAPI的下一種方法是將數據加密為本地計算機。 這意味着當ANYONE登錄到機器時可以解密敏感數據。 這是一個大禁忌!
我需要的是讓用戶有一種方法來指定他想要加密的數據,然后指定一個帳戶(在這種情況下,將是什么服務帳戶)並將其用於數據加密。
我找不到怎么做。 這篇MSDN文章暗示可以做到。 (請參閱“Web場景方案”一節。)該文章的TL; DR是針對ASP.Net應用程序的,您可以使用RsaProtectedConfigurationProvider
加密數據,並導出要與特定Web帳戶一起使用的密鑰。 這接近我想要的,但在我的情況下,我需要在WPF應用程序中創建數據並將其存儲以用於Windows Server服務。
如何才能做到這一點?
使用帳戶名作為加密的salt,decyption應使用登錄的帳戶名作為解密的salt。
我有一個建議,您可以創建用戶組將所需的用戶添加到該組。 僅當用戶使用第二種方法成為該組的一部分時才加密和解密數據。
您可以使用與EFS一樣平凡的東西來完成與此類似的操作,但與原始DPAPI不同,恢復密鑰可能會繞過保護。 在任何一種情況下,本地管理員都可以用自己的程序替換您的程序,並且可以完全訪問解密的數據。
至於設置它,最簡單的方法是使用服務帳戶以交互方式登錄,並使用System.Security.Cryptography.ProtectedData創建受保護的數據,或者在標有“encrypt”屬性的目錄中創建文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.