System.Security.Cryptography.ProtectedData.Unprotect在某些情况下引发
本文关键字:情况下 Security Cryptography ProtectedData Unprotect System | 更新日期: 2023-09-27 18:01:07
因此,我正在尝试使用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的文章,该机器上运行的任何进程都应该能够取消数据保护。但事实并非如此。
数据保护API使用为每个用户生成的密钥。这是一种对称加密方案,意味着为一个用户加密的数据不能被另一个用户解密。同一用户在不同的机器上也无法对其进行解密。
这给你留下了两个选择:
- 使用在同一台机器上的同一帐户下运行的代码对数据进行加密和解密
- 使用
CRYPTPROTECT_LOCAL_MACHINE
标志使用机器密钥,而不是用户的
无论哪种方式,加密和解密都必须以相同的方式进行。例如,在加密和解密时使用本地机器标志。