Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.IO;
- using System.Security.Cryptography;
- namespace ConsoleApp1
- {
- class Program
- {
- static void Main(string[] args)
- {
- /*
- * -O programa abaixo é uma implementação do algoritmo de criptografia AES256;
- * -Basta copiar o código, colar em um Console Application e compilar;
- * -Através do arquivo ORIGINAL o programa gerará um arquivo ENCRIPTADO e outro DECRIPTADO;
- * -O arquivo ORIGINAL e o DECRIPTADO serão idênticos, para terem certeza disso, baixem
- * o arquivo MD5 and SHA Checker aqui https://raylin.wordpress.com/downloads/md5-sha-1-checksum-utility/
- * e verifiquem os hashes dos arquivos;
- *
- *
- * Criado por: Andrew Vargas
- * Facebook: https://www.facebook.com/andrewvargas1991
- * PS: Pra quem tá com preguiça de copiar e compilar, hahaha, baixe no link
- * https://mega.nz/#!T15BQK6a!y5-z7UDxhauVTQKrF23ic81KI_muE4FwV3FOsq9RGzw
- */
- //Para pegar o caminho completo de um arquivo, basta você arrastaá-lo para dentro do console e apertar ENTER
- Console.Write("Escolha um arquivo: ");
- string Original = Console.ReadLine();
- //Serve para remover as aspas do nome capturado no console
- Original = Original.Replace("\"", "");
- //Para formatar o caminho e nome do arquivo encriptado
- string Encriptado =
- Path.GetDirectoryName(Original) + "\\" +
- Path.GetFileNameWithoutExtension(Original) + "_Encriptado" +
- Path.GetExtension(Original);
- //Para formatar o caminho e nome do arquivo decriptado
- string Decriptado =
- Path.GetDirectoryName(Original) + "\\" +
- Path.GetFileNameWithoutExtension(Original) + "_Decriptado" +
- Path.GetExtension(Original);
- //Pega a senha
- Console.Write("Digite uma senha: ");
- string senha = Console.ReadLine();
- //Inicializa o sal em bytes, os valores entre chaves representam o nome Andrew em caracteres Unicode
- byte[] sal_em_bytes = { 0x41, 0x6E, 0x64, 0x72, 0x65, 0x77 };
- //PS: Para uma lista completa de caracteres em Unicode visite o site https://unicode-table.com/pt/
- //Criar os vetores de bytes para os arquivo original e encriptado
- byte[] arquivo_original = File.ReadAllBytes(Original); //Lê os bytes do arquivo original
- byte[] arquivo_encriptado = Encrypt(arquivo_original, senha, sal_em_bytes); //Encriptaos bytes do arquivo original
- File.WriteAllBytes(Encriptado, arquivo_encriptado); //Escreve os bytes em um arquivo encriptado
- //Cria o vetor de bytes para o arquivo decriptado
- byte[] arquivo_decriptado = Decrypt(arquivo_encriptado, senha, sal_em_bytes); //Decripta os bytes do arquivo encriptado
- File.WriteAllBytes(Decriptado, arquivo_decriptado); //Escreve os bytes em um arquivo decriptado
- Console.WriteLine("\nAperte uma tecla para sair...");
- Console.ReadKey();
- }
- public static byte[] Encrypt(byte[] input, string pass, byte[] salt) //Método para encriptar vetor de bytes
- {
- //Inicializa uma instância para obter a senha e o sal (da senha) para derivar a chave
- PasswordDeriveBytes pdb =
- new PasswordDeriveBytes(pass, salt);
- MemoryStream ms = new MemoryStream();
- Aes aes = new AesManaged();
- //Determina o tamanho da chave (256 bits = 32bytes sendo que cada byte são 8 bits), por isso o nome AES256
- aes.Key = pdb.GetBytes(aes.KeySize / 8);
- aes.IV = pdb.GetBytes(aes.BlockSize / 8);
- CryptoStream cs = new CryptoStream(ms, aes.CreateEncryptor(), CryptoStreamMode.Write);
- cs.Write(input, 0, input.Length);
- //
- Console.WriteLine("\nO arquivo foi encriptado com o método de criptografia AES" + aes.KeySize);
- cs.Close();
- return ms.ToArray();
- }
- public static byte[] Decrypt(byte[] input, string pass, byte[] salt) //Método para encriptar vetor de bytes
- {
- //Inicializa uma instância para obter a senha e o sal (da senha) para derivar a chave
- PasswordDeriveBytes pdb =
- new PasswordDeriveBytes(pass, salt);
- MemoryStream ms = new MemoryStream();
- Aes aes = new AesManaged();
- aes.Key = pdb.GetBytes(aes.KeySize / 8);
- aes.IV = pdb.GetBytes(aes.BlockSize / 8);
- CryptoStream cs = new CryptoStream(ms, aes.CreateDecryptor(), CryptoStreamMode.Write);
- cs.Write(input, 0, input.Length);
- Console.WriteLine("O arquivo foi decriptado com o método de criptografia AES" + aes.KeySize);
- cs.Close();
- return ms.ToArray();
- }
- }
- }
- /*
- OBS:
- -A senha e o sal podem ser inicializados diretamente;
- -Recomenda-se que a inicialização do sal seja feita diretamente através de um vetor de bytes.
- -Para criar um programa que apenas encripte o arquivo, apague o método Decrypt e a variável
- arquivo_decriptado e as funções que envolvam esse vetor de bytes;
- -Para criar um programa que apenas decripte o arquivo, apague o método Encrypt e mude o vetor de
- bytes que será incluído nos parâmetros do método Decrypt;
- -O sal é como uma senha secundária que foi inserida em tempo de implementação, foi feito dessa
- forma para dar mais segurança;
- -O método de criptografia utilizado é AES256, tem esse nome por que a chave de criptografia tem
- o tamanho de 256 bits.
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement