System.Security.Cryptography.ProtectedData如何生成唯一ID

时间:2015-06-07 14:21:27

标签: c# .net cryptography dpapi

我使用System.Security.Cryptography.ProtectedData来保护许可证数据,然后再将其写入注册表。

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

Dataprotection范围是LocalMachine。

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

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

2 个答案:

答案 0 :(得分:1)

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

警告LocalMachine枚举值允许多个帐户取消保护数据。仅当您信任计算机上的每个帐户时才使用此值。在大多数情况下,您应该使用CurrentUser值。

加密数据只能在加密的同一台机器上解密。

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

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

答案 1 :(得分:0)

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

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

  

CryptProtectData函数对a中的数据执行加密   DATA_BLOB结构。通常,只有具有相同登录的用户   凭证作为加密数据的用户可以解密数据。在   另外,加密和解密通常必须在   同一台电脑。