2015-09-29 48 views
0

我有以下代码和应用程​​序有时成功,但对于某些用户它无法解密密码。它主要发生在服务器和多用户环境,在开发机器上效果很好。受保护的数据API问题

public static byte [] Protect(byte [] data) 
    { 
     try 
     { 
      // Encrypt the data using DataProtectionScope.CurrentUser. The result can be decrypted 
      // only by the same current user. 
      return ProtectedData.Protect(data, s_aditionalEntropy, DataProtectionScope.CurrentUser); 
     } 
     catch (CryptographicException e) 
     { 
      Console.WriteLine("Data was not encrypted. An error occurred."); 
      Console.WriteLine(e.ToString()); 
      return null; 
     } 
    } 

    public static byte [] Unprotect(byte [] data) 
    { 
     try 
     { 
      //Decrypt the data using DataProtectionScope.CurrentUser. 
      return ProtectedData.Unprotect(data, s_aditionalEntropy, DataProtectionScope.CurrentUser); 
     } 
     catch (CryptographicException e) 
     { 
      Console.WriteLine("Data was not decrypted. An error occurred."); 
      Console.WriteLine(e.ToString()); 
      return null; 
     } 
    } 
+1

按代码DataProtectionScope.CurrentUser其用户特定的,以便确保在多用户环境中,其保护方法被称为实例的每个用户登录。我的建议是验证问题变更范围DataProtectionScope.LocalMachine和验证,然后您可以确认 –

+0

感谢您的快速回复让我检查 –

+0

@sumeet kumar:LocalMachine范围工作正常..感谢 –

回答

0

DataProtectionScope.LocalMachine:此范围是有效的解密任何身份验证的用户在系统中。

DataProtectionScope.CurrentUser:此范围仅对身份用于加密的用户有效,只有身份可以使其解密。

public static byte [] Protect(byte [] data) 
     { 
      try 
      { 
       return ProtectedData.Protect(data, s_aditionalEntropy, DataProtectionScope.LocalMachine); 
      } 
      catch (CryptographicException e) 
      { 
       Console.WriteLine("Data was not encrypted. An error occurred."); 
       Console.WriteLine(e.ToString()); 
       return null; 
      } 
     } 

     public static byte [] Unprotect(byte [] data) 
     { 
      try 
      { 
       return ProtectedData.Unprotect(data, s_aditionalEntropy, DataProtectionScope.LocalMachine); 
      } 
      catch (CryptographicException e) 
      { 
       Console.WriteLine("Data was not decrypted. An error occurred."); 
       Console.WriteLine(e.ToString()); 
       return null; 
      } 
     } 
0

在服务器端环境中,您有一些问题需要使用它。查看详情:

CurrentUser范围:受保护的数据与相关CurrentUser,我的意思是,只有加密的数据可以实现解密它的用户 - 没有其他人。您可以将其理解为保护个人数据的例程。

LocalMachine Scope:如上所述,它允许不同用户解密数据,但可能导致安全问题!使用此范围,即使不在同一组/域中的用户也会解密数据!该控件不在加密例程中,而是在用户访问thar服务器中。

如果你有一个公共(或不属于域)服务器,并需要一些球员来访问某些类型的数据,你可能放弃DataProtectionScope并尝试定制程序,其中:

1 - 你检查用户是否获得授权。 2 - 您提供加密和解密数据的机制。 3 - 您可以对不同的用户或组采用不同的密钥。

细节,请考虑才能看到此链接: https://msdn.microsoft.com/en-us/library/system.security.cryptography.dataprotectionscope(v=vs.110).aspx

+0

代码由其他人完成,我维护它,所以我不想实现任何其他的关键机制。 LocalMachine范围适用于我 –