



O princípio básico por trás da criptografia é pegar uma informação legível e, pelo uso de um algoritmo, tornar essa informação ilegível. Porém, há uma ressalva: somente quem conhece o algoritmo e a chave usada para criptografar a informação terá acesso ao formato legível desta. Está um pouco confuso? Tudo bem! Neste conteúdo, vamos criptografar informações na prática usando uma técnica simples de criptografia. Fique comigo até o final!
Em programação embarcada, usamos diversos operadores ao longo do código. Os operadores bitwise são pouco conhecidos pelos programadores web, mas muito usados pelos programadores de embarcados. Eles fazem parte dos operadores binários. Confira na imagem abaixo.
Número (decimal)
Descrição (8 bits)
10
00001010
50
00110010
255
11111111
| X | Y | X | Y | X & Y | X ^ Y |
| 0 | 0 | 0 | 0 | 0 |
| 0 | 1 | 1 | 0 | 1 |
| 1 | 0 | 1 | 0 | 1 |
| 1 | 1 | 1 | 1 | 0 |
| Operação | Descrição | Resultado |
| 10 | 50 | 00001010 | 00110010 | 00111010 = 58 |
| 10 & 50 | 00001010 & 00110010 | 00000010 = 2 |
| 10 ^ 50 | 00001010 ^ 00110010 | 00111000 = 56 |
| Caractere | Byte da frase | Byte da chave | XOR | Equivalente |
| E | 69 | 10 | 69 ^ 10 = 79 | O |
| u | 117 | 5 | 117 ^ 5 = 112 | p |
| 32 | 2 | 32 ^ 2 = 34 | “ | |
| o | 111 | 11 | 111 ^ 11 = 100 | d |
| d | 100 | 10 | 100 ^ 10 = 110 | n |
| e | 101 | 5 | 101 ^ 5 = 96 | ` |
| i | 105 | 2 | 105 ^ 2 = 107 | k |
| … | … | … | … | … |
Para este tutorial, vamos aproveitar um circuito feito anteriormente aqui no blog.
O circuito é bem simples: basicamente conectamos os pinos de transmissão (TX) e recepção (RX) de dois ESP32. Veja o diagrama:
Antes de começarmos, certifique-se de que você tenha o VSCode instalado com a extensão do Platformio habilitada. Caso não tenha o setup preparado, faça o passo a passo deste tutorial.
#include <Arduino.h>
#define NOME_DO_ESP32 "Encriptador"
const String CHAVE_SECRETA = "secreta";
// Função para encriptar e desencriptar usando XOR
String xorEncryptDecrypt(const String &input) {
String output = "";
for (size_t i = 0; i < input.length(); i++) {
output += (char)(input[i] ^ CHAVE_SECRETA[i % CHAVE_SECRETA.length()]);
}
return output;
}
void setup() {
Serial.begin(115200);
Serial1.begin(9600, SERIAL_8N1, 16, 17);
delay(1000);
}
void loop() {
if (Serial1.available()) {
String mensagem = Serial1.readString();
for (size_t i = 0; i < mensagem.length(); i++) {
Serial.print((uint8_t)mensagem[i]);
Serial.print(" ");
}
Serial.println();
Serial.println("Mensagem recebida: " + mensagem);
mensagem = xorEncryptDecrypt(mensagem);
Serial.println("Mensagem criptografada: " + mensagem);
Serial1.print(mensagem);
}
}
Código para o ESP32 cliente
#include <Arduino.h>
#define NOME_DO_ESP32 "Encriptador"
const String CHAVE_SECRETA = "secreta";
// Função para encriptar e desencriptar usando XOR
String xorEncryptDecrypt(const String &input) {
String output = "";
for (size_t i = 0; i < input.length(); i++) {
output += (char)(input[i] ^ CHAVE_SECRETA[i % CHAVE_SECRETA.length()]);
}
return output;
}
void setup() {
Serial.begin(115200);
Serial1.begin(9600, SERIAL_8N1, 16, 17);
delay(1000);
}
void loop() {
delay(1000);
String mensagem = "Olá, tudo bem?";
Serial1.print(mensagem);
while(!Serial1.available()) {
delay(10);
}
String mensagemCriptografada = Serial1.readString();
Serial.println("Mensagem original: " + mensagem);
for (size_t i = 0; i < mensagem.length(); i++) {
Serial.print((uint8_t)mensagem[i]);
Serial.print(" ");
}
Serial.println();
Serial.println("Mensagem criptografada (em bytes):");
for (size_t i = 0; i < mensagemCriptografada.length(); i++) {
Serial.print((uint8_t)mensagemCriptografada[i]);
Serial.print(" ");
}
Serial.println();
// Desencriptar a mensagem
String mensagemDescriptografada = xorEncryptDecrypt(mensagemCriptografada);
for (size_t i = 0; i < mensagemDescriptografada.length(); i++) {
Serial.print((uint8_t)mensagemDescriptografada[i]);
Serial.print(" ");
}
Serial.println();
Serial.println("Mensagem descriptografada: " + mensagemDescriptografada);
while (true);
}
Tivemos como resultado a imagem abaixo:
Embora simples, este tutorial apresenta o básico por trás de qualquer algoritmo de criptografia: transformar uma mensagem legível em outra ilegível. Esse recurso é bastante utilizado na indústria de IoT, principalmente quando o assunto é transmissão de dados via rádio. Quer ver mais projetos legais como este? Dê uma olhada nos posts de nosso blog!
|
Aprenda a criptografar dados usando ESP32 e o Platformio no VSCode. Utilizamos a técnica de XOR e uma chave secreta!
Encontre tudo na Loja Eletrogate com frete grátis para compras acima de R$ 200