22 de junho de 2023

Cipher Code - Cifrando Textos

 Vamos ver exemplos de técnicas para cifrar textos.

As Cifra de Vigenere, Cifra de Espelhamento, Cifra Matemática e a Cifra de César são algumas das quais apliquei na biblioteca CipherCode.

São técnicas para cifrar mensagens e envia-las de forma segura aos seus destinatários. E montar esses algoritmos são uma excelente maneira para estudos de lógica de programação.

As cifras possuem cálculos semelhantes utilizando o padrão de substituição dos caracteres.

Na postagem Cifra de César entendemos como é realizado esse procedimento.

A Cifra Matemática consiste em transformar cada letra em um número e aplicar uma operação matemática sobre o mesmo, utilizando o valor da chave.
Essa cifra eu montei para estudos e a sua lógica fui desenvolvendo imaginando possibilidades.

A biblioteca está disponível em:

E a sua instalação pode ser realizada através do gerenciador de bibliotecas da IDE Arduino:

Vamos ver o texto "acesse o efeitonerd para mais projetos" codificado com as cifras incluídas na biblioteca.

Cifra de César
Chave: 17
Resultado: rtvjjv f vwvzkfeviu grir drzj gifavkfj

Cifra de Vigenere
Chave: efeitonerd
Resultado: ehi0bs 1 iwhmysvx5q true reqb 34s0hxtw
 
Cifra de Matemética
Chave: 2023
Resultado: *10205*10215*10285^4132^4132*10285 ^4084 *10285^4124*10285^4080*10185^4084^4136*10285^4096^4104 *10275*10205^4096*10205 ^4072*10205^4080^4132 *10275^4096^4084*10315*10285*10185^4084^4132
 
Cifra de Espelhamento
Chave: não é utilizada
Resultado: nprffr b rsrvgbareq cnen znvf cebwrgbf
 
Texto em formato Hacker
Resultado: 4c3$$3 0 3f3170n3rd p4r4 m41$ pr0j370$
 
Deixo o código fonte como exemplo, já possibilitando passar os textos através do monitor serial.

Referências:
 
 
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
/*---------------------------------------------------------
  Programa : CipherCode
  Autor    : Fellipe Couto [ http://www.efeitonerd.com.br ]
  Data     : 21/06/2023
  ---------------------------------------------------------*/
#include <CipherCode.h>  //https://github.com/fellipecouto/CipherCode

int menu = 0;
int typeCipher = 0;
bool code = true;
String txt = "";

void setup() {
  Serial.begin(115200);
  delay(500);
  Serial.println("CIPHER CODE - CIFRANDO TEXTOS");
  Serial.println("www.efeitonerd.com.br");
}

void loop() {
  String strSerial = "";

  //Get string from serial
  while (Serial.available() > 0) {
    strSerial += Serial.readString();
  }

  if (strSerial.length() > 0) {
    if (menu == 1) {
      txt = strSerial;
      Serial.println("--> " + txt);
      Serial.println("\nSelecione a cifra que sera utilizada:");
      Serial.println("1=Cifra de Cesar / 2=Cifra de Vigenere / 3=Cifra Matematica / 4=Cifra de Espelhamento / 5=Hacker / 6=MSN / 7=Inverte Texto");
      menu = 2;
    } else if (menu == 2) {
      typeCipher = strSerial.toInt();
      if (typeCipher > 7) typeCipher = 7;
      Serial.println("--> " + String(typeCipher));
      Serial.println("\nSelecione a opcao:");
      Serial.println("1=Codificar 2=Decodificar");
      menu = 3;
    } else if (menu == 3) {
      if (strSerial == "1") {
        code = true;
        Serial.println("--> Codificar");
      } else {
        code = false;
        Serial.println("--> Decodificar");
      }
      Serial.println("\nChave:");
      Serial.println("(Para Cifra de Cesar e Matematica, use valores numericos. Para Cifra de Vigenere uma String (alfanumerico). Para as demais, a chave não é usada e pode colocar qualquer valor)");
      menu = 4;
    } else if (menu == 4) {
      Serial.println("--> " + strSerial);
      delay(500);
      Serial.println("\nResultado:");
      switch (typeCipher) {
        case 1:
          Serial.println("--> " + ceasarCipher(txt, strSerial.toInt(), code));
          break;
        case 2:
          Serial.println("--> " + vigenereCipher(txt, strSerial, code));
          break;
        case 3:
          Serial.println("--> " + mathCipher(txt, strSerial.toInt(), code));
          break;
        case 4:
          Serial.println("--> " + mirrorCipher(txt));
          break;
        case 5:
          Serial.println("--> " + hackerStr(txt, code));
          break;
        case 6:
          Serial.println("--> " + msnStr(txt, code));
          break;
        case 7:
          Serial.println("--> " + reverseStr(txt));
          break;
        default:
          Serial.println("--> ?");
          break;
      }
      menu = 0;
      delay(3000);
    }
  }

  if (menu == 0) {
    Serial.println("\nEntre com o texto que deseja codificar ou decodificar:");
    menu = 1;
  }
}

Nenhum comentário:

Postar um comentário