1

Criptografia básica em código ASCII com C#

#.NET 5 #.NET C#
CARLOS SILVA
CARLOS SILVA

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

  1. Introdução
  2. Fundamentos
  3. Elemento alvo
  4. Isolando o código ASCII de cada carácter
  5. O carácter curinga e o método Encript
  6. O processo de reversão e o método Decript
  7. Primeira aplicação de console
  8. Pré-requisitos
  9. Preparando o ambiente
  10. Criando a aplicação
  11. Criando o algorítimo em C#
  12. 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.

0
79

Comentários (0)

Administrador de Empresas | Desenvolvedor C# Júnior

Brasil