Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.IO;
- using System.Security.Cryptography; //Para usar as funções criptografia
- using System.Text;
- namespace AES256
- {
- class Program
- {
- /* Essa é uma implementação do algoritmo de criptografia AES256
- * para strings, muito útil para encriptar mensagens que
- * você não quer que pessoas não-autorizadas tenham acesso.
- *
- * Criado por: Andrew Vargas
- * Facebook: https://www.facebook.com/andrewvargas1991
- */
- static void Main(string[] args)
- {
- Console.Write("Digite alguma coisa: ");
- String stringOriginal = Console.ReadLine(); //Lê a string a ser encriptada
- String stringEncriptada = Criptografia.Encrypt(stringOriginal); //Chama o método de encriptação
- String stringDecriptada = Criptografia.Decrypt(stringEncriptada); //Chama o método de decriptação
- //Imprime a string original, a encriptada e a decriptada
- Console.WriteLine("\n\nOriginal: " + stringOriginal);
- Console.WriteLine("Encriptado: " + stringEncriptada);
- Console.WriteLine("Decriptado: " + stringDecriptada);
- Console.WriteLine("\nAperte uma tecla para sair...");
- Console.ReadKey();
- }
- public class Criptografia //Classe para utilizar os métodos e variáveis
- {
- /// Vetor de bytes utilizados para a criptografia (Chave Externa)
- private static byte[] bIV =
- { 0x50, 0x08, 0xF1, 0xDD, 0xDE, 0x3C, 0xF2, 0x18,
- 0x44, 0x74, 0x19, 0x2C, 0x53, 0x49, 0xAB, 0xBC };
- /* Representação de valor em base 64 (Chave Interna)
- O Valor representa a transformação para base64 de
- um conjunto de 32 caracteres (8 * 32 = 256bits)
- A chave é: "Criptografias com Rijndael / AES"
- OBS: Caso queira-se ler uma chave (senha) do teclado,
- deve-se converter essa string para o seu valor na base 64
- */
- private const string cryptoKey = "Q3JpcHRvZ3JhZmlhcyBjb20gUmluamRhZWwgLyBBRVM=";
- //Método para encriptar string
- public static string Encrypt(string text)
- {
- try
- {
- // Se a string não está vazia, executa a criptografia
- if (!string.IsNullOrEmpty(text))
- {
- // Cria instancias de vetores de bytes com as chaves
- byte[] bKey = Convert.FromBase64String(cryptoKey); //Retorna a cryptoKey para "Criptografias com Rijndael / AES"
- //Imprime o valor da cryptoKey carregada no vetor de bytes bKey em forma de char
- //Imprime Criptografias com Rinjdael / AES
- for (int i = 0; i < bKey.Length; i++)
- Console.Write((char)bKey[i]);
- byte[] bText = new UTF8Encoding().GetBytes(text);
- // Instancia a classe de criptografia Rijndael
- Rijndael rijndael = new RijndaelManaged();
- // Define o tamanho da chave "256 = 8 * 32"
- // Lembre-se: chaves possíves:
- // 128 (16 caracteres), 192 (24 caracteres) e 256 (32 caracteres)
- rijndael.KeySize = 256;
- // Cria o espaço de memória para guardar o valor criptografado:
- MemoryStream mStream = new MemoryStream();
- // Instancia o encriptador
- CryptoStream encryptor = new CryptoStream(
- mStream, rijndael.CreateEncryptor(bKey, bIV), CryptoStreamMode.Write);
- // Faz a escrita dos dados criptografados no espaço de memória
- encryptor.Write(bText, 0, bText.Length);
- // Despeja toda a memória.
- encryptor.FlushFinalBlock();
- // Pega o vetor de bytes da memória e gera a string criptografada
- return Convert.ToBase64String(mStream.ToArray());
- }
- else
- {
- // Se a string for vazia retorna nulo
- return null;
- }
- }
- catch (Exception ex)
- {
- // Se algum erro ocorrer, dispara a exceção
- throw new ApplicationException("Erro ao criptografar", ex);
- }
- }
- //Método para decriptar string
- public static string Decrypt(string text)
- {
- try
- {
- // Se a string não está vazia, executa a criptografia
- if (!string.IsNullOrEmpty(text))
- {
- // Cria instancias de vetores de bytes com as chaves
- byte[] bKey = Convert.FromBase64String(cryptoKey);
- byte[] bText = Convert.FromBase64String(text);
- // Instancia a classe de criptografia Rijndael
- Rijndael rijndael = new RijndaelManaged();
- // Define o tamanho da chave "256 = 8 * 32"
- // Lembre-se: chaves possíves:
- // 128 (16 caracteres), 192 (24 caracteres) e 256 (32 caracteres)
- rijndael.KeySize = 256;
- // Cria o espaço de memória para guardar o valor DEScriptografado:
- MemoryStream mStream = new MemoryStream();
- // Instancia o Decriptador
- CryptoStream decryptor = new CryptoStream(
- mStream, rijndael.CreateDecryptor(bKey, bIV), CryptoStreamMode.Write);
- // Faz a escrita dos dados criptografados no espaço de memória
- decryptor.Write(bText, 0, bText.Length);
- // Despeja toda a memória.
- decryptor.FlushFinalBlock();
- // Instancia a classe de codificação para que a string venha de forma correta
- UTF8Encoding utf8 = new UTF8Encoding();
- // Com o vetor de bytes da memória, gera a string descritografada em UTF8
- return utf8.GetString(mStream.ToArray());
- }
- else
- {
- // Se a string for vazia retorna nulo
- return null;
- }
- }
- catch (Exception ex)
- {
- // Se algum erro ocorrer, dispara a exceção
- throw new ApplicationException("Erro ao descriptografar", ex);
- }
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement