Advertisement
amv1991

AES256 para strings

Apr 19th, 2020
589
1
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 7.46 KB | None | 1 0
  1. using System;
  2. using System.IO;
  3. using System.Security.Cryptography;     //Para usar as funções criptografia
  4. using System.Text;
  5.  
  6. namespace AES256
  7. {
  8.     class Program
  9.     {
  10.         /*      Essa é uma implementação do algoritmo de criptografia AES256
  11.          *          para strings, muito útil para encriptar mensagens que
  12.          *          você não quer que pessoas não-autorizadas tenham acesso.
  13.          *
  14.          *      Criado por: Andrew Vargas
  15.          *      Facebook: https://www.facebook.com/andrewvargas1991
  16.          */
  17.  
  18.         static void Main(string[] args)
  19.         {
  20.             Console.Write("Digite alguma coisa: ");
  21.             String stringOriginal = Console.ReadLine();  //Lê a string a ser encriptada
  22.  
  23.             String stringEncriptada = Criptografia.Encrypt(stringOriginal);    //Chama o método de encriptação
  24.             String stringDecriptada = Criptografia.Decrypt(stringEncriptada);    //Chama o método de decriptação
  25.  
  26.             //Imprime a string original, a encriptada e a decriptada
  27.             Console.WriteLine("\n\nOriginal: " + stringOriginal);
  28.             Console.WriteLine("Encriptado: " + stringEncriptada);
  29.             Console.WriteLine("Decriptado: " + stringDecriptada);
  30.  
  31.             Console.WriteLine("\nAperte uma tecla para sair...");
  32.             Console.ReadKey();
  33.         }
  34.  
  35.         public class Criptografia   //Classe para utilizar os métodos e variáveis
  36.         {
  37.             /// Vetor de bytes utilizados para a criptografia (Chave Externa)        
  38.             private static byte[] bIV =
  39.                 { 0x50, 0x08, 0xF1, 0xDD, 0xDE, 0x3C, 0xF2, 0x18,
  40.                     0x44, 0x74, 0x19, 0x2C, 0x53, 0x49, 0xAB, 0xBC };
  41.  
  42.             /* Representação de valor em base 64 (Chave Interna)    
  43.                 O Valor representa a transformação para base64 de    
  44.                 um conjunto de 32 caracteres (8 * 32 = 256bits)    
  45.                 A chave é: "Criptografias com Rijndael / AES"    
  46.                
  47.                 OBS: Caso queira-se ler uma chave (senha) do teclado,
  48.                     deve-se converter essa string para o seu valor na base 64
  49.             */
  50.             private const string cryptoKey = "Q3JpcHRvZ3JhZmlhcyBjb20gUmluamRhZWwgLyBBRVM=";
  51.  
  52.             //Método para encriptar string
  53.             public static string Encrypt(string text)
  54.             {
  55.                 try
  56.                 {
  57.                     // Se a string não está vazia, executa a criptografia
  58.                     if (!string.IsNullOrEmpty(text))
  59.                     {
  60.                         // Cria instancias de vetores de bytes com as chaves                
  61.                         byte[] bKey = Convert.FromBase64String(cryptoKey);  //Retorna a cryptoKey para "Criptografias com Rijndael / AES"
  62.  
  63.                         //Imprime o valor da cryptoKey carregada no vetor de bytes bKey em forma de char
  64.                         //Imprime Criptografias com Rinjdael / AES
  65.                         for (int i = 0; i < bKey.Length; i++)
  66.                             Console.Write((char)bKey[i]);
  67.  
  68.                         byte[] bText = new UTF8Encoding().GetBytes(text);
  69.  
  70.                         // Instancia a classe de criptografia Rijndael
  71.                         Rijndael rijndael = new RijndaelManaged();
  72.  
  73.                         // Define o tamanho da chave "256 = 8 * 32"                
  74.                         // Lembre-se: chaves possíves:                
  75.                         // 128 (16 caracteres), 192 (24 caracteres) e 256 (32 caracteres)                
  76.                         rijndael.KeySize = 256;
  77.  
  78.                         // Cria o espaço de memória para guardar o valor criptografado:                
  79.                         MemoryStream mStream = new MemoryStream();
  80.                         // Instancia o encriptador                
  81.                         CryptoStream encryptor = new CryptoStream(
  82.                             mStream, rijndael.CreateEncryptor(bKey, bIV), CryptoStreamMode.Write);
  83.  
  84.                         // Faz a escrita dos dados criptografados no espaço de memória
  85.                         encryptor.Write(bText, 0, bText.Length);
  86.                         // Despeja toda a memória.                
  87.                         encryptor.FlushFinalBlock();
  88.                         // Pega o vetor de bytes da memória e gera a string criptografada                
  89.                         return Convert.ToBase64String(mStream.ToArray());
  90.                     }
  91.                     else
  92.                     {
  93.                         // Se a string for vazia retorna nulo                
  94.                         return null;
  95.                     }
  96.                 }
  97.                 catch (Exception ex)
  98.                 {
  99.                     // Se algum erro ocorrer, dispara a exceção            
  100.                     throw new ApplicationException("Erro ao criptografar", ex);
  101.                 }
  102.             }
  103.  
  104.             //Método para decriptar string
  105.             public static string Decrypt(string text)
  106.             {
  107.                 try
  108.                 {
  109.                     // Se a string não está vazia, executa a criptografia          
  110.                     if (!string.IsNullOrEmpty(text))
  111.                     {
  112.                         // Cria instancias de vetores de bytes com as chaves                
  113.                         byte[] bKey = Convert.FromBase64String(cryptoKey);
  114.                         byte[] bText = Convert.FromBase64String(text);
  115.  
  116.                         // Instancia a classe de criptografia Rijndael                
  117.                         Rijndael rijndael = new RijndaelManaged();
  118.  
  119.                         // Define o tamanho da chave "256 = 8 * 32"                
  120.                         // Lembre-se: chaves possíves:                
  121.                         // 128 (16 caracteres), 192 (24 caracteres) e 256 (32 caracteres)                
  122.                         rijndael.KeySize = 256;
  123.  
  124.                         // Cria o espaço de memória para guardar o valor DEScriptografado:              
  125.                         MemoryStream mStream = new MemoryStream();
  126.  
  127.                         // Instancia o Decriptador                
  128.                         CryptoStream decryptor = new CryptoStream(
  129.                             mStream, rijndael.CreateDecryptor(bKey, bIV), CryptoStreamMode.Write);
  130.  
  131.                         // Faz a escrita dos dados criptografados no espaço de memória  
  132.                         decryptor.Write(bText, 0, bText.Length);
  133.                         // Despeja toda a memória.                
  134.                         decryptor.FlushFinalBlock();
  135.                         // Instancia a classe de codificação para que a string venha de forma correta        
  136.                         UTF8Encoding utf8 = new UTF8Encoding();
  137.                         // Com o vetor de bytes da memória, gera a string descritografada em UTF8      
  138.                         return utf8.GetString(mStream.ToArray());
  139.                     }
  140.                     else
  141.                     {
  142.                         // Se a string for vazia retorna nulo                
  143.                         return null;
  144.                     }
  145.                 }
  146.                 catch (Exception ex)
  147.                 {
  148.                     // Se algum erro ocorrer, dispara a exceção            
  149.                     throw new ApplicationException("Erro ao descriptografar", ex);
  150.                 }
  151.             }
  152.         }
  153.     }
  154. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement