## About System.Security.Cryptography.ProtectedData offers a simplified interface for utilizing Microsoft Windows DPAPI's [CryptProtectData](https://learn.microsoft.com/windows/win32/api/dpapi/nf-dpapi-cryptprotectdata) and [CryptUnprotectData](https://learn.microsoft.com/windows/win32/api/dpapi/nf-dpapi-cryptunprotectdata) functions. **Note**: Since it relies on Windows DPAPI, this package is only supported on Windows platforms. For more complex cryptographic operations or cross-platform support, consider the [System.Security.Cryptography](https://learn.microsoft.com/dotnet/api/system.security.cryptography) namespace. ## Key Features * Built upon the robust and secure Windows Data Protection API (DPAPI). * Data can be protected either for current process or for any process on the machine. * Scope of protection can be defined either to the current user or the local machine. ## How to Use Utilizing this package is quite simple, and it mainly revolves around two methods: `Protect` and `Unprotect`. Here, `originalData` is the data you want to protect, `optionalEntropy` is an additional byte array used to increase encryption complexity, and `DataProtectionScope` specifies whether the data protection should apply to the current user or the machine. ```csharp using System.Security.Cryptography; using System.Text; byte[] originalData = Encoding.UTF8.GetBytes("This is a secret"); byte[] optionalEntropy = new byte[64]; Random.Shared.NextBytes(optionalEntropy); // To protect: byte[] encryptedData = ProtectedData.Protect( originalData, optionalEntropy, DataProtectionScope.CurrentUser); // To unprotect: byte[] decryptedData = ProtectedData.Unprotect( encryptedData, optionalEntropy, DataProtectionScope.CurrentUser); ``` ## Main Types The main type provided by this library is: * `System.Security.Cryptography.ProtectedData` ## Additional Documentation * [Conceptual documentation](https://learn.microsoft.com/dotnet/standard/security/how-to-use-data-protection) * [API documentation](https://learn.microsoft.com/dotnet/api/system.security.cryptography.protecteddata) ## Related Packages * PKCS and CMS algorithms: [System.Security.Cryptography.Pkcs](https://www.nuget.org/packages/System.Security.Cryptography.Pkcs/) ## Feedback & Contributing System.Security.Cryptography.ProtectedData is released as open source under the [MIT license](https://licenses.nuget.org/MIT). Bug reports and contributions are welcome at [the GitHub repository](https://github.com/dotnet/runtime).