Вам нужно сослаться на System.Security и иметь код, подобный этому (это VB.NET, но он тривиально портирован на C #):
Imports System.Security.Cryptography
' ....
Dim sensitiveDataBytes() As Byte = Encoding.Unicode.GetBytes(sensitiveData)
Dim entropy As Byte() = Guid.NewGuid().ToByteArray()
Dim encryptedSensitiveDataBytes() As Byte = ProtectedData.Protect(sensitiveDataBytes, entropy, DataProtectionScope.LocalMachine)
Dim entropyPlusSensitiveData As Byte() = entropy.Concat(encryptedSensitiveDataBytes).ToArray()
Return entropyPlusSensitiveData
То, что вы делаете здесь, вы используетеSystem.Security.Cryptography.ProtectedData
использовать DPAPI для защиты данных с помощью области «локальный компьютер», а затем создать некоторую случайную 16-байтовую энтропию, которую вы добавляете к зашифрованным данным.Затем вы можете безопасно передать массив размером 16+ (длина зашифрованных данных).
На стороне расшифровки вы делаете аналогичный трюк: вы отбираете 16 байтов энтропии и затем используете DPAPI для расшифровки:
Dim entropyPlusSensitiveData As Byte() = data ' the byte array created previously
Dim entropy() As Byte = entropyPlusSensitiveData.Take(16).ToArray()
Dim encryptedSensitiveDataBytes() As Byte = entropyPlusSensitiveData.Skip(16).ToArray()
Dim sensitiveDataBytes() As Byte = ProtectedData.Unprotect(encryptedSensitiveDataBytes, entropy, DataProtectionScope.LocalMachine)
Энтропия не обязательна, но настоятельно рекомендуется.