可以使用.NET框架以下方法來保護您的數據,他們使用的DPAPI內部保護您的數據,你可以直接在C#或VB中使用它們。NET,而無需擺弄系統DLL調用:
namespace System.Security.Cryptography
{
// Summary:
// Provides methods for protecting and unprotecting data. This class cannot
// be inherited.
public sealed class ProtectedData
{
public static byte[] Protect(byte[] userData,
byte[] optionalEntropy, DataProtectionScope scope);
public static byte[] Unprotect(byte[] encryptedData,
byte[] optionalEntropy, DataProtectionScope scope);
}
}
要使用它,參考System.Security
添加到您的項目。我強烈建議使用字節數組optionalEntropy
將SALT添加到受保護的數據(將一些隨機值添加到字節數組,這些數據對於您要保護的數據是唯一的)。
對於scope
,您可以使用DataProtectionScope.CurrentUser
,它將使用當前用戶的憑據對要保護的數據進行加密。
在某些情況下,DataProtectionScope.LocalMachine
也很有用。在這種情況下,受保護的數據與機器上下文相關聯。使用此設置,計算機上運行的任何進程都可以解除數據保護。它通常用於服務器特定的應用程序,該應用程序在不受信任的用戶不允許訪問的服務器上運行。
使用Protect
方法加密數據,使用Unprotect
進行解密。您可以根據您的應用程序(文件,數據庫,註冊表等)的要求存儲返回的字節數組。
更多關於這些方法可以在這裏找到在MSDN:
對於代碼示例和大小寫您有興趣加密config文件的應用程序的部分,檢查了這一點:
我建議你使用的零件一個鹽(即通過使用optionalEntropy
參數) - 防止彩虹桌攻擊。
還有就是DPAPI解決方案的一個缺點我想提一提:關鍵是根據你的Windows憑據,這意味着誰擁有你的Windows憑據訪問產生有可能訪問受保護的數據。在您的帳戶下運行的程序也可以訪問受保護的數據。
我知道這是前一陣子,但我已經提供了一個關於如何存儲加密密碼的問題的答案。請看一看。 – Matt 2013-03-12 08:37:41