Uma das técnicas mais antigas para cifrar mensagens, utilizada por Júlio César durante o império Romano, para se comunicar com suas tropas durante as guerras.
A técnica de substituição das letras que chamamos de Cifra de César.
Utilizando a posição de cada letra no alfabeto, é realizada a substituição das letras do texto por outra letra definida através de um número chave determinado.
Utilizando o número 3 como chave, substituímos todas as letras A da mensagem pela letra D, todas as letras B pela letra E, e assim por diante.
Sendo assim, considerando as 26 letras do nosso alfabeto, podemos estar utilizando uma chave com valor compreendido entre 1 e 25.
Para decifrar a mensagem, basta efetuar a substituição das letras no sentido contrário.
Referências:
https://pt.wikipedia.org/wiki/Cifra_de_César
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 | /*--------------------------------------------------------- Programa : CIFRA DE CESAR Autor : Fellipe Couto [ http://www.efeitonerd.com.br ] Data : 10/06/2021 ---------------------------------------------------------*/ int menu = 0; String txt = ""; bool code = true; int key = 1; void setup() { Serial.begin(115200); Serial.println("CIFRA DE CÉSAR"); Serial.println("www.efeitonerd.com.br"); } void loop() { String strSerial = ""; //Recebe a string da serial while (Serial.available() > 0) { strSerial += Serial.readString(); delay(10); } //Verifica se existe texto preenchido através da serial if (strSerial.length() > 0) { if (menu == 1) { txt = strSerial; Serial.println("--> " + txt); Serial.println("\nSelecione a opção:"); Serial.println("1=Codificar 2=Decodificar"); menu = 2; } else if (menu == 2) { if (strSerial.toInt() <= 0 || strSerial.toInt() > 2) { Serial.println("Valor inválido. Deve ser 1 ou 2."); return; } if (strSerial == "1") { code = true; Serial.println("--> Codificar"); } else { code = false; Serial.println("--> Decodificar"); } Serial.println("\nValor da chave (1 a 25):"); menu = 3; } else if (menu == 3) { if (strSerial.toInt() <= 0 || strSerial.toInt() > 25) { Serial.println("Valor inválido. Deve ser entre 1 e 25."); return; } key = strSerial.toInt(); Serial.println("--> " + String(key)); delay(500); Serial.println("\nResultado:"); Serial.println("--> " + ceasarCipher(txt, key, code)); menu = 0; delay(4000); } } if (menu == 0) { Serial.println("\nDigite o texto:"); menu = 1; } } String ceasarCipher(String txt, int shift, bool encode) { String alphabet = "abcdefghijklmnopqrstuvwxyz"; if (encode == false) alphabet = "zyxwvutsrqponmlkjihgfedcba"; String txtCode = ""; for (int i = 0; i < txt.length(); i++) { bool inAlphabet = false; for (int a = 0; a < alphabet.length(); a++) { if (txt.substring(i, i + 1) == alphabet.substring(a, a + 1)) { inAlphabet = true; if (a + shift >= alphabet.length()) { txtCode += alphabet.substring(a + shift - alphabet.length(), a + shift - alphabet.length() + 1); } else { txtCode += alphabet.substring(a + shift, a + shift + 1); } } } if (inAlphabet == false) txtCode += txt.substring(i, i + 1); } return txtCode; } |
Nenhum comentário:
Postar um comentário