Advertisement
amv1991

AES256

Mar 21st, 2020
832
1
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 6.00 KB | None | 1 0
  1. using System;
  2. using System.IO;
  3. using System.Security.Cryptography;
  4.  
  5. namespace ConsoleApp1
  6. {
  7.     class Program
  8.     {
  9.         static void Main(string[] args)
  10.         {
  11.             /*
  12.              *          -O programa abaixo é uma implementação do algoritmo de criptografia AES256;
  13.              *          -Basta copiar o código, colar em um Console Application e compilar;
  14.              *          -Através do arquivo ORIGINAL o programa gerará um arquivo ENCRIPTADO e outro DECRIPTADO;
  15.              *          -O arquivo ORIGINAL e o DECRIPTADO serão idênticos, para terem certeza disso, baixem
  16.              *              o arquivo MD5 and SHA Checker aqui https://raylin.wordpress.com/downloads/md5-sha-1-checksum-utility/
  17.              *              e verifiquem os hashes dos arquivos;
  18.              *              
  19.              *          
  20.              *          Criado por: Andrew Vargas
  21.              *          Facebook: https://www.facebook.com/andrewvargas1991
  22.              *          PS: Pra quem tá com preguiça de copiar e compilar, hahaha, baixe no link
  23.              *              https://mega.nz/#!T15BQK6a!y5-z7UDxhauVTQKrF23ic81KI_muE4FwV3FOsq9RGzw
  24.              */
  25.  
  26.  
  27.             //Para pegar o caminho completo de um arquivo, basta você arrastaá-lo para dentro do console e apertar ENTER
  28.             Console.Write("Escolha um arquivo: ");
  29.             string Original = Console.ReadLine();
  30.  
  31.             //Serve para remover as aspas do nome capturado no console
  32.             Original = Original.Replace("\"", "");
  33.  
  34.             //Para formatar o caminho e nome do arquivo encriptado
  35.             string Encriptado =
  36.                 Path.GetDirectoryName(Original) + "\\" +
  37.                 Path.GetFileNameWithoutExtension(Original) + "_Encriptado" +
  38.                 Path.GetExtension(Original);
  39.  
  40.             //Para formatar o caminho e nome do arquivo decriptado
  41.             string Decriptado =
  42.                 Path.GetDirectoryName(Original) + "\\" +
  43.                 Path.GetFileNameWithoutExtension(Original) + "_Decriptado" +
  44.                 Path.GetExtension(Original);
  45.  
  46.             //Pega a senha
  47.             Console.Write("Digite uma senha: ");
  48.             string senha = Console.ReadLine();
  49.  
  50.             //Inicializa o sal em bytes, os valores entre chaves representam o nome Andrew em caracteres Unicode
  51.             byte[] sal_em_bytes = { 0x41, 0x6E, 0x64, 0x72, 0x65, 0x77 };
  52.  
  53.             //PS: Para uma lista completa de caracteres em Unicode visite o site https://unicode-table.com/pt/
  54.  
  55.             //Criar os vetores de bytes para os arquivo original e encriptado
  56.             byte[] arquivo_original = File.ReadAllBytes(Original);  //Lê os bytes do arquivo original
  57.             byte[] arquivo_encriptado = Encrypt(arquivo_original, senha, sal_em_bytes);  //Encriptaos bytes do arquivo original
  58.             File.WriteAllBytes(Encriptado, arquivo_encriptado);     //Escreve os bytes em um arquivo encriptado
  59.  
  60.             //Cria o vetor de bytes para o arquivo decriptado
  61.             byte[] arquivo_decriptado = Decrypt(arquivo_encriptado, senha, sal_em_bytes);    //Decripta os bytes do arquivo encriptado
  62.             File.WriteAllBytes(Decriptado, arquivo_decriptado);     //Escreve os bytes em um arquivo decriptado
  63.  
  64.             Console.WriteLine("\nAperte uma tecla para sair...");
  65.             Console.ReadKey();
  66.         }
  67.  
  68.         public static byte[] Encrypt(byte[] input, string pass, byte[] salt)  //Método para encriptar vetor de bytes
  69.         {
  70.             //Inicializa uma instância para obter a senha e o sal (da senha) para derivar a chave
  71.             PasswordDeriveBytes pdb =
  72.             new PasswordDeriveBytes(pass, salt);
  73.  
  74.             MemoryStream ms = new MemoryStream();
  75.             Aes aes = new AesManaged();
  76.  
  77.             //Determina o tamanho da chave (256 bits = 32bytes sendo que cada byte são 8 bits), por isso o nome AES256
  78.             aes.Key = pdb.GetBytes(aes.KeySize / 8);
  79.             aes.IV = pdb.GetBytes(aes.BlockSize / 8);
  80.             CryptoStream cs = new CryptoStream(ms, aes.CreateEncryptor(), CryptoStreamMode.Write);
  81.             cs.Write(input, 0, input.Length);
  82.  
  83.             //
  84.             Console.WriteLine("\nO arquivo foi encriptado com o método de criptografia AES" + aes.KeySize);
  85.             cs.Close();
  86.             return ms.ToArray();
  87.         }
  88.  
  89.         public static byte[] Decrypt(byte[] input, string pass, byte[] salt)  //Método para encriptar vetor de bytes
  90.         {
  91.             //Inicializa uma instância para obter a senha e o sal (da senha) para derivar a chave
  92.             PasswordDeriveBytes pdb =
  93.             new PasswordDeriveBytes(pass, salt);            
  94.  
  95.             MemoryStream ms = new MemoryStream();
  96.             Aes aes = new AesManaged();
  97.             aes.Key = pdb.GetBytes(aes.KeySize / 8);
  98.             aes.IV = pdb.GetBytes(aes.BlockSize / 8);
  99.             CryptoStream cs = new CryptoStream(ms, aes.CreateDecryptor(), CryptoStreamMode.Write);
  100.             cs.Write(input, 0, input.Length);
  101.             Console.WriteLine("O arquivo foi decriptado com o método de criptografia AES" + aes.KeySize);
  102.             cs.Close();
  103.             return ms.ToArray();
  104.         }
  105.     }
  106. }
  107. /*
  108.         OBS:
  109.         -A senha e o sal podem ser inicializados diretamente;
  110.         -Recomenda-se que a inicialização do sal seja feita diretamente através de um vetor de bytes.
  111.         -Para criar um programa que apenas encripte o arquivo, apague o método Decrypt e a variável
  112.             arquivo_decriptado e as funções que envolvam esse vetor de bytes;
  113.         -Para criar um programa que apenas decripte o arquivo, apague o método Encrypt e mude o vetor de
  114.             bytes que será incluído nos parâmetros do método Decrypt;
  115.         -O sal é como uma senha secundária que foi inserida em tempo de implementação, foi feito dessa
  116.             forma para dar mais segurança;
  117.         -O método de criptografia utilizado é AES256, tem esse nome por que a chave de criptografia tem
  118.             o tamanho de 256 bits.
  119. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement