数据保护 API (DPAPI) 完全符合您的要求。它使用机器或(更好的)用户的凭据作为加密密钥提供任意数据的对称加密。您不必担心管理密钥;Windows 会为您解决这些问题。如果用户更改密码,Windows 将使用用户的新密码重新加密数据。
DPAPI 在 .NET 中通过 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 可以与漫游配置文件一起正常工作(如此处所述),但您需要将加密数据存储在您的各种机器可以访问的位置(网络共享、IsolatedStorage 和IsolatedStorageScope.Roaming等)。
有关详细信息,请参阅 MSDN 中的 ProtectedData 类。这里有一份 DPAPI 白皮书,其中包含比您想要的更多的信息。