所以我试图在System.Security.Cryptography.ProtectedData对象中使用Unprotect方法并继续获取异常:
cryptographicexception key not valid for use in specified state
我认为它与DataProtectionScope有关(但我不是100%)。
如果我登录并在DEBUG模式下运行服务可执行文件,这个方法有效,这对我来说,它将在“currentuser”下运行。但是,如果我尝试运行在LocalSystem帐户下运行的实际Windows服务,它将无法抛出前面提到的异常。
方法:
ProtectedData.Unprotect(Byte[] byteArray, <some_password_salt>, DataProtectionScope.CurrentUser)
DataProtectionScope枚举只有CurrentUser或LocalMachine作为选项。我不确定解决这个问题的最佳选择是什么。
我已经尝试将其设置为DataProtectionScope.LocalMachine,根据MSDN文章,在机器上运行的任何进程都应该能够取消保护数据。但不是。
答案 0 :(得分:20)
Data protection API使用为每个用户生成的密钥。它是一种对称加密方案,这意味着为用户加密的数据不能被其他用户解密。它也不能由同一用户在另一台机器上解密。
这给你留下了两个选择:
CRYPTPROTECT_LOCAL_MACHINE
标志来使用机器密钥,而不是用户的无论哪种方式,加密和解密必须以相同的方式完成。例如,在加密和解密时使用本地机器标志。