Introdução
Criptografia básica em código ASCII com .NET C#. Essa é uma das técnicas mais simples de se fazer uma criptografia de informações com uso da tabela ASCII, que é a representação universal de caracteres.
Tópicos
- Introdução
- Fundamentos
- Elemento alvo
- Isolando o código ASCII de cada carácter
- O carácter curinga e o método Encript
- O processo de reversão e o método Decript
- Primeira aplicação de console
- Pré-requisitos
- Preparando o ambiente
- Criando a aplicação
- Criando o algorítimo em C#
- Conclusão
2. Fundamentos
Na primeira parte deste artigo, vou mostrar a lógica por trás desse processo de criptografar e descriptografar, e qual estratégia iremos abordar para chegar no resultado desejado.
2.0 Elemento alvo
O elemento alvo se refere ao conjunto de caracteres que você pretende criptografar ou descriptografar, e pode ser qualquer sequência, como por exemplo: senhas, valores, telefones, e-mail e etc.
Para o acompanhamento do artigo, irei utilizar o elemento alvo chamado de Meta
2.1 Isolando os elementos únicos
A primeira coisa a ser feita, é a quebra do texto em células individuais para se obter os caracteres únicos e assim extrair o seu respectivo código ASCII.
Índices
[0] M
[1] e
[2] t
[3] a
2.2 Obtendo o código ASCII de cada caractere
Com a etapa anterior concluída, agora devemos fazer a identificação do código ASCII correspondente a cada elemento
Índices Código ASCII
[0] M 77
[1] e 101
[2] t 116
[3] a 97
2.3 Caractere curinga e o método Encript
Precisamos de um curinga para ser encaixado depois de cada código ASCII. Não é recomendado o uso de valores numéricos, para não se misturar aos valores originais. Para o nosso exemplo eu vou utilizar um # (cerquilha).
Índices Código ASCII
[0] M 77
[1] #
[2] e 101
[3] #
[2] t 116
[4] #
[3] a 97
Perceba que foram adicionados nos índices 1,3 e 4 o caractere coringa "#" para separar os valores referente ao código ASCII.
Vamos aos resultados finais desse exemplo.
Caractere curinga = #
Elemento alvo = Meta
Elemento criptografado = 77#101#116#97
2.4 O processo de reversão e o método Decript
O processo de reversão é semelhante ao que fizemos anteriormente, e o que irá nos auxiliar é justamento o caractere curinga, que vai servir para identificar os pontos chaves de separação entre cada elemento.
Elemento criptografado = 77#101#116#97
Quebre a sua sequência em índices
Índices
[0] 77
[1] #
[2] 101
[3] #
[4] 116
[5] #
[6] 97
Remova os índices com os caracteres curingas
Índices
[0] 77
[2] 101
[4] 116
[6] 97
Faça a conversão do código ASCII para o seu valor original
Índices Caractere
[0] 77 M
[2] 101 e
[4] 116 t
[6] 97 a
3. Primeira aplicação de console
Agora que você já aprendeu os fundamentos, vamos partir para uma aplicação prática, que irá consumir um algoritmo já construído e que está disponível através do pacote nuget.
3.0 Pré-requisitos
Para conseguir acompanhar os exemplos práticos, é necessário que você tenha os seguintes pré-requisitos.
. SDK .NET
. Visual Studio Code
. Conhecimento básico sobre a criação de projetos através da CLI .NET
3.1 Preparando o ambiente
Construa um diretório chamado de ConsoleASCII
para armazenar a nossa aplicação de console.
3.1 Aplicação de Console
Entre no diretório que criamos e com o lado direito do mouse, abra a opção "abrir no terminal" no linux ou "prompt de comando" no windows.
Com o terminal aberto, digite o seguinte comando:
dotnet new console
Após o conclusão desse comando, o projeto de console estará criado, agora vamos abrir o projeto no VS Code, e para isso, basta digitarmos o seguinte comando:
code .
Após a aplicação aberta, abra o terminal no vs code e faça a instalação de um pacote nuget que já desenvolvi previamente para fazermos esse processo de criptografia.
No terminal, digite o seguinte comando:
dotnet add package Cison.Security.Encription --version 1.0.4
Após isso, abra a classe Program e vamos criar o seguinte código
using System; using Cison.Security.Encryption; // importa o namespace namespace ConsoleASCII { class Program { static void Main(string[] args) { // cria uma variável representando o elemento alvo string alvo = "AbCd" // criptografa o elemento alvo string textEncrypt = ASCIIBasicEncryption.Encrypt(alvo); Console.WriteLine("Text encrypt: {0}", textEncrypt); // descriptografa o elemento alvo string textDecrypt = ASCIIBasicEncryption.Decrypt(textEncrypt); Console.WriteLine("Text decrypt: {0}", textDecrypt); Console.ReadKey(); } } }
O código acima, faz a importação do namespace que possui a classe responsável pelas conversões
using Cison.Security.Encryption;
E dentro da classe ASCIIBasicEncryption possui os dois métodos principais que resumem o que vimos na introdução deste artigo, que é o Encrypt e Decrypt.
4. Criando o algorítimo em C#
No exemplo anterior, utilizamos uma classe que já abstrai a lógica por trás do algorítimo de conversão, mas o que queremos entender, é como criarmos na unha o nosso próprio algoritmo, e isso vamos aprender com mais detalhes na segunda parte desse artigo. Porém, vou deixar aqui a lógica que utilizei para realização desse processo.
O primeiro passo foi criar uma biblioteca de classes, e para isso utilizei o seguinte comando:
dotnet new classlib
Dentro da estrutura do projeto, criei uma pasta chamada Entities e dentro dela, construí as classes necessárias.
ConvertASC.cs
namespace Cison.Security.Encryption { internal static class ConvertASC { internal static int Asc(char text) { return text; } } }
ConvertCHR.cs
namespace Cison.Security.Encryption { internal static class ConvertCHR { internal static char Chr(int CharCode) { return (char)CharCode; } } }
ASCIIBasicEncryption.cs
using System; namespace Cison.Security.Encryption{ public static class ASCIIBasicEncryption{ public static string Encrypt(string textToBeEncrypted){ try{ if(IsTextValidate(textToBeEncrypted)){ string textResult = ""; int lenghtText = textToBeEncrypted.Length - 1; for(int i = 0; i <= lenghtText; i++){ textResult += ConvertASC.Asc(GetCaracter(i, textToBeEncrypted)) + "#"; } return StractLastCaracter(textResult); } return textToBeEncrypted; } catch (System.Exception){ throw; } } public static string Decrypt(string textToBeDecrypted){ try{ if(IsTextValidate(textToBeDecrypted)){ string[] listCaracter = textToBeDecrypted.Split('#'); int valueConvertForInt; string textResult = string.Empty; foreach(var caracter in listCaracter){ int.TryParse(caracter, out valueConvertForInt); textResult += ConvertCHR.Chr(valueConvertForInt); } return textResult; } return textToBeDecrypted; } catch (System.Exception){ throw; } } private static char GetCaracter(int index, string text){ return char.Parse(text.Substring(index,1)); } public static bool IsTextValidate(string value){ if(string.IsNullOrWhiteSpace(value)) return false; return true; } public static string StractLastCaracter(string text){ return text.Substring(0,text.Length-1); } } }
4. Conclusão
Esse processo é bom para praticarmos o nosso raciocínio lógico, e para aplicações simples, é bem útil caso queira por exemplo, texto simples, ou informações básicas.
Por enquanto é isso pessoal, estarei gravando uma aula com mais detalhes explicando a criação passo a passo deste último código.
Segue o diretório no meu GitHub: https://github.com/CarlosEX/CisonSecurity/
Valeu time!
Att,
Carlos Antonio.
Comentários (0)