Criptografia é a ciência ou a arte de escrever em cifras. A criptografia provê meios através de técnicas e algoritmos matemáticos para se transformar um texto claro ou plano (inteligível) em um texto cifrado (ininteligível).
Há relatos do uso de criptografia por povos da antiguidade onde podemos destacar a cifra de Atbash onde acredita-se que trechos do Torá e do livro do profesta Jeremias usaram essa maneira de codificação (referências não cientificas).
Uma evolução (talvez não) da cifra de Atbash é a Cifra supostamente desenvolvida pelo Imperador Julio César que usava uma técnica de substituição na qual cada letra do texto é substituída por outra. Para saber mais sobre cifras de substituição, monoalfabéticas e Cifras de César, clique na imagem abaixo e acesse nossa vídeo-aula no youtube.
Em nossa experiencia iremos usar um display de Cristal liquido (LCD) que fará a interface com o usuário, um potenciômetro que será usado para realizar a seleção da Chave no processo de criptografia e um botão para confirmação após a escolha da chave. Na figura 1 temos o esquema montado para realização da experiencia.
Figura 1. Circuito usado na experiencia de criptografia. |
Conforme visto na vídeo-aula, para realizar a criptografia usaremos o resto da divisão para substituir a palavra em texto claro pela sua equivalente cifrada.
Para utilizar o LCD a biblioteca LiquidCrystal será utilizada facilitando assim o controle do dispositivo. Para entender melhor o uso das bibliotecas no Arduíno, acesse nossa postagem sobre o assunto clicando aqui. Se antes de analisar o código usado você quiser ver o experimento rodando, clique na imagem abaixo e acesse o youtube.
Após ver a explicação do projeto de criptografia de César, segue código utilizado na experiencia.
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //Configura os pinos do Arduíno conectados ao LCD
// Para entender o uso do LCD acesse: Em Breve
//Variáveis globais
//Variáveis para armazenar valor da chave criptográfica e flag de controle
int K =15;
int Def_K=0; //Flag para saber qdo chave já foi selecionada
//Variáveis de manipulação de texto
char claro[30]; //Variável que armazenará texto claro
char cifra[30]; //Variável que armazenará texto cifrado
int vPot = 0; //Variável que armazenará valor do potenciômetro
//Alfabeto que será usado na analise e criptografia
char alfa [26] ={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
//Variáveis de controle
int l=0; //Variavel para posicionar coluna do cursos no LCD
char op; // Variável para controlar botão
int j=0;
int Ncifra=0;
void setup()
{
lcd.begin(16, 2); //Inicia o LCD com dimensões 16x2
Serial.begin(9600);
pinMode(8,INPUT);
lcd.setCursor(1, 0); //Comando para posicionar cursor no LCD
lcd.print("Cifra de Cesar"); //Escreve no LCD msg inicial
lcd.setCursor(0, 1);
lcd.print("Bruno Rodrigues");
Serial.println("*--- Criptografia de Cesar e Arduíno -----* ");
Serial.println("*--- Escolha a chave criptográfica e digite o texto alfa, ao finalizar o texto Digite Z para ver o texto cifrado -----* ");
Serial.println("*--- Desenvolvido por Bruno Rodrigues -----* ");
delay(3000);
lcd.clear();
}
void loop()
{
if(Def_K==0)
{
lcd.setCursor(0, 0);
lcd.print("Defina a chave:"); //Escreve no LCD
define_chave();
Serial.println("Digite o texto claro: ");
}
else
{
recebe_texto();
}
}
void define_chave()
{
Serial.print("Chave K: ");
lcd.setCursor(0, 1);
lcd.print("K= "); //Escreve no LCD
while(digitalRead(8)==HIGH)
{
vPot = analogRead(5);
K= map(vPot, 0, 1023, 0, 26); //Variável para mapear clique aqui para sabe mais
Serial.print(K);Serial.print(" ");
lcd.setCursor(3, 1);
lcd.print(K); //Mostra chave que está sendo escolhida no LCD
delay(500);
}
delay(1000);
Def_K=1;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("chave K= "); //Escreve no LCD
lcd.setCursor(9, 0);
lcd.print(K);
Serial.println("");
delay(500);
lcd.clear();
}
void recebe_texto()
{
int i=0;
lcd.setCursor(0, 0);
lcd.print("Digite o texto: ");
op= Serial.read();
if(op == '!')
{
lcd.clear();
exibe_cifra();
}
while (i<=24)
{
if(op == alfa[i])
{
lcd.setCursor(l, 1);
lcd.print(alfa[i]);
//Calculo da criptografia usando MOD 26
Ncifra= (i+K)%26;
claro[l]=alfa[i];
cifra[j]=alfa[Ncifra];
j++;
l++;
}
i++;
}
}
void exibe_cifra()
{
int i=0;
l=0;
Serial.print("A Palavra cifrada é: ");
while (i<=24 || claro[i]=="\n")
{
lcd.setCursor(l,0);
lcd.print(claro[i]);
lcd.setCursor(l,1);
lcd.print(cifra[i]);
Serial.print(cifra[i]);
i++;
if(i<=15)
{
l++;
}
}
delay(5000);
lcd.clear();
}
Desafios:
Desafio 1 - Faça sistema similar ao apresentado acima que decifre um texto cifrado com Cifras de César.
Desafio 2 - Faça um sistema onde o texto será criptografado 2 vezes usando chaves diferentes.
e a descriptografia? como faz?
ResponderExcluir