数据保护API(DPAPI)正是您想要的。它使用机器或用户凭据作为加密密钥,对任意数据进行对称加密。您无需担心管理密钥;Windows会为您处理。如果用户更改密码,Windows将使用用户的新密码重新加密数据。
在.NET中,DPAPI通过System.Security.Cryptography.ProtectedData类公开。
byte[] plaintextBytes = GetDataToProtect()
byte[] encodedBytes = ProtectedData.Protect(plaintextBytes, null, DataProtectionScope.CurrentUser)
Protect方法的第二个参数是一个可选的熵字节数组,可以作为额外的应用程序特定"秘密"使用。
要解密,请使用ProtectedData.Unprotect调用:
byte[] encodedBytes = GetDataToUnprotect()
byte[] plaintextBytes = ProtectedData.Unprotect(encodedBytes, null, DataProtectionScope.CurrentUser)
DPAPI可以与漫游配置文件(如此处所述)正确配合使用,但您需要将加密数据存储在各个计算机都可以访问的位置(网络共享、具有IsolatedStorageScope.Roaming的IsolatedStorage等)。
有关更多信息,请参见MSDN中的ProtectedData类。此处有一份DPAPI白皮书,其中包含比您想要的更多信息。