首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在某些情况下,System.Security.Cryptography.ProtectedData.Unprotect会抛出无效的键错误

问在某些情况下,System.Security.Cryptography.ProtectedData.Unprotect会抛出无效的键错误
EN

Stack Overflow用户
提问于 2011-07-06 02:48:28
回答 1查看 15.2K关注 0票数 14

因此,我尝试利用System.Security.Cryptography.ProtectedData对象中的Unprotect方法,并不断获得异常:

代码语言:javascript
复制
cryptographicexception key not valid for use in specified state

我认为这与DataProtectionScope有关(但我不是100%)。

如果我登录并在调试模式下运行服务可执行文件,则此方法有效,这意味着它将在"currentuser“下运行。但是,如果我尝试运行实际的windows服务,它在LocalSystem帐户下运行,它将抛出前面提到的异常。

方法:

代码语言:javascript
复制
ProtectedData.Unprotect(Byte[] byteArray, <some_password_salt>, DataProtectionScope.CurrentUser)

DataProtectionScope枚举只有CurrentUser或LocalMachine可供选择。我不确定解决这个问题的最佳选择是什么。

我已经尝试将其设置为DataProtectionScope.LocalMachine,根据MSDN文章,在机器上运行的任何进程都应该能够解除数据保护。但并不是。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-07-06 04:09:19

Data protection API使用为每个用户生成的密钥。它是一种对称加密方案,这意味着为一个用户加密的数据不能被另一个用户解密。它也不能由不同机器上的同一用户解密。

这给你留下了两个选择:

  • 使用在同一计算机上的同一帐户下运行的代码对数据进行加密和解密
  • 使用CRYPTPROTECT_LOCAL_MACHINE标志来使用计算机密钥,而不是用户的

无论哪种方式,加密和解密都必须以相同的方式进行。例如,在加密和解密时使用本地计算机标志。

票数 23
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6587405

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档