using System;
using System.Security;
using System.Security.Cryptography;
using System.Collections.Generic;
using System.Text;

namespace DPAPIDemo
{
   class Program
   {
      static void Main(string[] args)
      {
         string messageToProtect = "aaaabbbbccccdddd";
         byte[] messageArray =
           System.Text.Encoding.GetEncoding(1250).GetBytes(messageToProtect);

         ProtectedMemory.Protect(messageArray, MemoryProtectionScope.SameLogon);

         // to powinno spowodować wyświetlenie 16 bajtów bezużytecznych danych
         Console.WriteLine(System.Text.Encoding.GetEncoding(1250).GetString(messageArray));

         ProtectedMemory.Unprotect(messageArray, MemoryProtectionScope.SameLogon);

         // teraz zawartość tablicy zostanie wyświetlona poprawnie
         Console.WriteLine(System.Text.Encoding.GetEncoding(1250).GetString(messageArray));

         // dane chronione, które mają zostać użyte w strumieniu, w pliku itp.
         string fileMessage = "Purpurowy żółw trenuje loty o świcie...";
         byte[] fileMsgArray = System.Text.Encoding.GetEncoding(1250).GetBytes(fileMessage);

         // pewna tablica bajtów dla wprowadzenia entropii
         byte[] entropy = { 0, 1, 3, 5, 7, 9 };
         byte[] protectedMessage = ProtectedData.Protect(
           fileMsgArray, entropy, DataProtectionScope.CurrentUser);

         Console.WriteLine("Chroniona tablica bajtów:");
         Console.WriteLine(
           System.Text.Encoding.GetEncoding(1250).GetString(protectedMessage));

         byte[] clearMessage = ProtectedData.Unprotect(
           protectedMessage, entropy, DataProtectionScope.CurrentUser);
         Console.WriteLine("Niechronione/Odszyfrowane Dane:");
         Console.WriteLine(Encoding.GetEncoding(1250).GetString(clearMessage));

         Console.ReadLine();
      }
   }
}
