2015-06-07 21 views
0

林。如何System.Security.Cryptography.ProtectedData使用System.Security.Cryptography.ProtectedData它写入注册表之前保护许可证数据生成唯一的标识

ProtectData.Protect(Byte[], Byte[], DataProtectionScope.LocalMachine) 

Dataprotection范围是LocalMachine。

ProtectData用于加密字符串的参数是什么? 如果我将加密的字符串复制到另一台机器,它会工作吗?

某些用户报告许可问题,ProtectedData是否一致?

+0

及其对DPAPI的CryptProtectData函数的包装,大量的文件; https://msdn.microsoft.com/en-us/library/windows/desktop/aa380261%28v=vs.85%29.aspx –

+0

@AlexK。我看了一下。如果我使用本地机器的范围,如果用户更改他的密码或更改硬件或其他东西,密钥是否会更改? – techno

回答

0

在LOCALMACHINE范围,受保护的数据与机器上下文相关联。计算机上运行的任何进程都可以取消数据保护。此枚举值通常用于服务器特定的应用程序,该应用程序在不允许不受信任的用户访问的服务器上运行。

小心LOCALMACHINE枚举值允许多个帐户取消保护的数据。只有当您信任计算机上的每个帐户时才使用此值。对于大多数情况,您应该使用CurrentUser值。

加密的数据只能在其被加密的相同的机器上被解密。

DPAPI使用MasterKey(随机数据的512位)以生成用于加密和解密的会话密钥。这意味着它将保持完整,直到重新安装操作系统。

https://msdn.microsoft.com/en-us/library/ms995355.aspx

+0

Thanks.But即时通讯寻找更多的细节。这种方法是否考虑到加密时的机器硬件参数?如果硬件改变了,它会起作用吗? – techno

+0

@techno主密钥和会话密钥是随机生成的密钥,这意味着它们不依赖于硬件。请查看更新的答案。 –

+0

好吧。因此,如果我使用本地计算机作用域,则数据将被正确解密,除非重新安装操作系统,如果用户更改密码,会是一个问题吗? – techno

0

反射显示ProtectData.Protect基本上是crypt32.dll的CryptProtectData()函数的包装。

从MSDN:(https://msdn.microsoft.com/en-us/library/windows/desktop/aa380261%28v=vs.85%29.aspx

CryptProtectData函数对在一个 DATA_BLOB结构的数据加密。通常,只有与加密数据的用户具有相同登录凭证的用户才能解密数据。在 另外,加密和解密通常必须在 同一台计算机上完成。

+0

LocalMachine作用域将用当前计算机而不是单个用户加密的数据关联起来。调用CryptProtectData的计算机上的任何用户都可以使用CryptUnprotectData来解密数据。 –

相关问题