0% acharam este documento útil (0 voto)
11 visualizações6 páginas

Desafio 5 Arduíno

O documento apresenta um projeto de criptografia utilizando um circuito com um teclado e um display LCD, desenvolvido por alunos da Universidade Federal de Mato Grosso do Sul. O código implementa funcionalidades para criptografar e descriptografar senhas, além de permitir a alteração da senha através de um sistema de tentativas. O projeto é parte de um desafio na disciplina de Introdução à Computação.

Enviado por

Luan Rodolfo
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
11 visualizações6 páginas

Desafio 5 Arduíno

O documento apresenta um projeto de criptografia utilizando um circuito com um teclado e um display LCD, desenvolvido por alunos da Universidade Federal de Mato Grosso do Sul. O código implementa funcionalidades para criptografar e descriptografar senhas, além de permitir a alteração da senha através de um sistema de tentativas. O projeto é parte de um desafio na disciplina de Introdução à Computação.

Enviado por

Luan Rodolfo
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd

Universidade Federal de Mato Grosso do Sul

Faculdade de Computação
Introdução à Computação
Mariana Caravanti de Souza

DESAFIO 5

Tecnognose

Luan Rodolfo Leme dos Santos - 202519040545


Caio e Silva Barbieri - 202519040146
Guilherme de Assis Escobar - 202519040308
Henrico Oliveira de Queiroz - 202519040359

Campo Grande
18 de junho de 2025
1 Link Tinkercad
https://www.tinkercad.com/things/cYpkeSP3LKS-desafio-5-last-dance?sharecode=
6flFCFIexjOpwCxUfzUYSG6_wW-lf_31n_sOZQ5c7FI

2 Circuito

Figura 1: Imagem do circuito

3 Código

// --- Inclusao das Bibliotecas Essenciais ---


#include<Keypad.h>
#include <LiquidCrystal_I2C.h>

// --- Configuracao dos Componentes ---


LiquidCrystal_I2C lcd(0x27, 16, 2);

const byte numLinhas = 4;


const byte numColunas = 4;

byte linhas[numLinhas] = {7, 6, 5, 4};


byte colunas[numColunas] = {11, 10, 9, 8};

1
char teclas[numLinhas][numColunas] =
{
{’1’, ’2’, ’3’, ’A’},
{’4’, ’5’, ’6’, ’B’},
{’7’, ’8’, ’9’, ’C’},
{’*’, ’0’, ’#’, ’D’}
};

Keypad teclado = Keypad(makeKeymap(teclas),


linhas, colunas, numLinhas, numColunas);

// --- Variaveis do Sistema de Criptografia e Senha ---


const char chaveDeCriptografia = ’S’;

String senhaSecretaCriptografada;
String chaveCriptografada;

const byte MAX_CARACTERES = 5;


byte tentativasRestantes = 3;

// Funcao para criptografar ou descriptografar uma String.


String criptografar(String dados) {
String dadosProcessados = "";
for (int i = 0; i < dados.length(); i++) {
dadosProcessados += dados[i] ^ chaveDeCriptografia;
}
return dadosProcessados;
}

// Funcao de configuracao, executada uma vez.


void setup()
{
Serial.begin(9600);

senhaSecretaCriptografada = criptografar("12345");
chaveCriptografada = criptografar("AAAAA");

lcd.init();
lcd.clear();
lcd.backlight();
}

// Funcao principal, executada em loop.


void loop()

2
{
if (tentativasRestantes > 0) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Senha (");
lcd.print(tentativasRestantes);
lcd.print(" T):");
lcd.setCursor(0, 1);

String senhaDigitada = ler_do_teclado();


String senhaDigitadaCriptografada =
criptografar(senhaDigitada);

if (senhaDigitadaCriptografada == chaveCriptografada) {
mudarSenha();
}
else if (senhaDigitadaCriptografada ==
senhaSecretaCriptografada) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Acesso Liberado!");
while (true) {}
}
else {
tentativasRestantes--;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Senha Incorreta!");
delay(2000);
}
}
else {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("SISTEMA");
lcd.setCursor(0, 1);
lcd.print("BLOQUEADO");
while (true) {}
}
}

// Funcao para ler do teclado.


String ler_do_teclado() {
String valorRetornado = "";
char valorLido;

while (true) {

3
valorLido = teclado.waitForKey();

if (valorLido == ’#’) {
break;
}

if (valorLido == ’B’) {
if (valorRetornado.length() > 0) {
valorRetornado.remove(valorRetornado.length() - 1);
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 1);

for (int i = 0; i < valorRetornado.length(); i++) {


lcd.print((char)(valorRetornado[i] ^
chaveDeCriptografia));
}
}
continue;
}

if (valorRetornado.length() < MAX_CARACTERES) {


valorRetornado += valorLido;
lcd.print((char)(valorLido ^ chaveDeCriptografia));
}
}
return valorRetornado;
}

// Funcao para alterar a senha.


void mudarSenha() {
lcd.clear();
lcd.print("Digite a Nova:");
lcd.setCursor(0, 1);
String novaSenha = ler_do_teclado();

lcd.clear();
lcd.print("Confirme a Nova:");
lcd.setCursor(0, 1);
String confirmacaoSenha = ler_do_teclado();

if (novaSenha.length() > 0 &&


novaSenha == confirmacaoSenha) {
senhaSecretaCriptografada = criptografar(novaSenha);
lcd.clear();
lcd.print("Senha Alterada!");
} else {

4
lcd.clear();
lcd.print("Erro! As senhas");
lcd.setCursor(0,1);
lcd.print("nao conferem.");
}
delay(2000);
}

Você também pode gostar