您可以使用.NET Framework的以下方法来保护您的数据;他们在内部使用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 文件的某些部分感兴趣,请查看以下内容:
我建议您使用SALT(通过使用optionalEntropy
参数) - 它可以防止彩虹表攻击。
我想提一下 DPAPI 解决方案的一个缺点:密钥是根据您的 Windows 凭据生成的,这意味着有权访问您的 Windows 凭据的任何人都可能有权访问受保护的数据。在您的帐户下运行的程序也可以访问受保护的数据。