aula 131

Dúvida | Como criptografar / descriptografar uma frase com Portugol?

Respondendo mais uma dúvida aqui em nosso Curso de Algoritmos e Lógica de Programação, vamos hoje aprender como criptografar / descriptografar uma frase com Portugol.

O problema a ser resolvido na aula de hoje é:

Desenvolva um algoritmo que, ao ser executado, ofereça as opções de criptografar e descriptografar. Após escolher a opção desejada o usuário irá fornecer uma frase através do teclado. A criptografia consiste em trocar cada caractere da frase pela segunda próxima letra do alfabeto (“a” substitui por “c” e assim por diante) ou no caso de número pelo primeiro próximo da sequência de 0 (zero) a 9. Exemplo: “dia 10” ficaria “fkc 21”. A descriptografia será o processo inverso.

Observe que cada caracter deve ser trocado, substituído por outro caracter, tanto no processo para criptografar quanto para descriptografar. Isso nos leva a imaginar duas funções, uma para criptografar e outra para descriptografar. Cada função recebe apenas um caracter e retorna apenas um caracter, bem simples.

A função a seguir será utilizada para codificar uma frase, trocando cada caracter por outro correspondente.

	funcao caracter codificar(caracter l){
		escolha(l){
			caso 'a':
				retorne 'c'
			caso 'b':
				retorne 'd'
			caso 'c':
				retorne 'e'
			caso 'd':
				retorne 'f'
			caso 'e':
				retorne 'g'
			caso 'f':
				retorne 'h'
			caso 'g':
				retorne 'i'
			caso 'h':
				retorne 'j'
			caso 'i':
				retorne 'k'
			caso 'j':
				retorne 'l'
			caso 'k':
				retorne 'm'
			caso 'l':
				retorne 'n'
			caso 'm':
				retorne 'o'
			caso 'n':
				retorne 'p'
			caso 'o':
				retorne 'q'
			caso 'p':
				retorne 'r'
			caso 'q':
				retorne 's'
			caso 'r':
				retorne 't'
			caso 's':
				retorne 'u'
			caso 't':
				retorne 'v'
			caso 'u':
				retorne 'w'
			caso 'v':
				retorne 'x'
			caso 'w':
				retorne 'y'
			caso 'x':
				retorne 'z'
			caso 'y':
				retorne 'a'
			caso 'z':
				retorne 'b'
			caso '0':
				retorne '1'
			caso '1':
				retorne '2'
			caso '2':
				retorne '3'
			caso '3':
				retorne '4'
			caso '4':
				retorne '5'
			caso '5':
				retorne '6'
			caso '6':
				retorne '7'
			caso '7':
				retorne '8'
			caso '8':
				retorne '9'
			caso '9':
				retorne '0'
			caso contrario:
				retorne l
		}
	}

A função a seguir será utilizada para decodificar um texto, retornando o real caracter para cada caracter recebido.

	funcao caracter decodificar(caracter l){
		escolha(l){
			caso 'a':
				retorne 'y'
			caso 'b':
				retorne 'z'
			caso 'c':
				retorne 'a'
			caso 'd':
				retorne 'b'
			caso 'e':
				retorne 'c'
			caso 'f':
				retorne 'd'
			caso 'g':
				retorne 'e'
			caso 'h':
				retorne 'f'
			caso 'i':
				retorne 'g'
			caso 'j':
				retorne 'h'
			caso 'k':
				retorne 'i'
			caso 'l':
				retorne 'j'
			caso 'm':
				retorne 'k'
			caso 'n':
				retorne 'l'
			caso 'o':
				retorne 'm'
			caso 'p':
				retorne 'n'
			caso 'q':
				retorne 'o'
			caso 'r':
				retorne 'p'
			caso 's':
				retorne 'q'
			caso 't':
				retorne 'r'
			caso 'u':
				retorne 's'
			caso 'v':
				retorne 't'
			caso 'w':
				retorne 'u'
			caso 'x':
				retorne 'v'
			caso 'y':
				retorne 'w'
			caso 'z':
				retorne 'x'
			caso '0':
				retorne '9'
			caso '1':
				retorne '0'
			caso '2':
				retorne '1'
			caso '3':
				retorne '2'
			caso '4':
				retorne '3'
			caso '5':
				retorne '4'
			caso '6':
				retorne '5'
			caso '7':
				retorne '6'
			caso '8':
				retorne '7'
			caso '9':
				retorne '8'
			caso contrario:
				retorne l
		}
	}

Agora que já temos as funções responsáveis por realizar a troca dos caracteres, podemos trabalhar nas funções para codificar e decodificar todo o texto.

A função a seguir obtêm cada caracter de uma frase lida do teclado e, usando a função codificar já desenvolvida, gera uma nova frase codificada. Seu retorno é uma cadeia contendo a frase codificada.

	funcao cadeia criptografar(cadeia texto){
		cadeia nova = ""
		caracter letra
		inteiro i, tam = Texto.numero_caracteres(texto)

		para(i = 0; i < tam; i++){
			letra = codificar(Texto.obter_caracter(texto, i))
			nova = nova + letra
		}
		retorne nova
	}

A função a seguir obtêm cada caracter de uma frase codificada e, usando a função decodificar já desenvolvida, gera uma nova frase decodificada igual à frase original lida do teclado. Seu retorno é uma cadeia contendo a frase decodificada.

	funcao cadeia descriptografar(cadeia texto){
		cadeia nova = ""
		caracter letra
		inteiro i, tam = Texto.numero_caracteres(texto)

		para(i = 0; i < tam; i++){
			letra = decodificar(Texto.obter_caracter(texto, i))
			nova = nova + letra
		}
		retorne nova
	}

Código completo em Portugol para Criptografar e Descriptografar uma frase

programa{

	inclua biblioteca Texto

	/*
	 * 	CRIPTOGRAFIA
	 * 	
	 * 	Código escrito por Wagner Gaspar
	 * 	Maior de 2021
	*/

	funcao caracter codificar(caracter l){
		escolha(l){
			caso 'a':
				retorne 'c'
			caso 'b':
				retorne 'd'
			caso 'c':
				retorne 'e'
			caso 'd':
				retorne 'f'
			caso 'e':
				retorne 'g'
			caso 'f':
				retorne 'h'
			caso 'g':
				retorne 'i'
			caso 'h':
				retorne 'j'
			caso 'i':
				retorne 'k'
			caso 'j':
				retorne 'l'
			caso 'k':
				retorne 'm'
			caso 'l':
				retorne 'n'
			caso 'm':
				retorne 'o'
			caso 'n':
				retorne 'p'
			caso 'o':
				retorne 'q'
			caso 'p':
				retorne 'r'
			caso 'q':
				retorne 's'
			caso 'r':
				retorne 't'
			caso 's':
				retorne 'u'
			caso 't':
				retorne 'v'
			caso 'u':
				retorne 'w'
			caso 'v':
				retorne 'x'
			caso 'w':
				retorne 'y'
			caso 'x':
				retorne 'z'
			caso 'y':
				retorne 'a'
			caso 'z':
				retorne 'b'
			caso '0':
				retorne '1'
			caso '1':
				retorne '2'
			caso '2':
				retorne '3'
			caso '3':
				retorne '4'
			caso '4':
				retorne '5'
			caso '5':
				retorne '6'
			caso '6':
				retorne '7'
			caso '7':
				retorne '8'
			caso '8':
				retorne '9'
			caso '9':
				retorne '0'
			caso contrario:
				retorne l
		}
	}

	funcao caracter decodificar(caracter l){
		escolha(l){
			caso 'a':
				retorne 'y'
			caso 'b':
				retorne 'z'
			caso 'c':
				retorne 'a'
			caso 'd':
				retorne 'b'
			caso 'e':
				retorne 'c'
			caso 'f':
				retorne 'd'
			caso 'g':
				retorne 'e'
			caso 'h':
				retorne 'f'
			caso 'i':
				retorne 'g'
			caso 'j':
				retorne 'h'
			caso 'k':
				retorne 'i'
			caso 'l':
				retorne 'j'
			caso 'm':
				retorne 'k'
			caso 'n':
				retorne 'l'
			caso 'o':
				retorne 'm'
			caso 'p':
				retorne 'n'
			caso 'q':
				retorne 'o'
			caso 'r':
				retorne 'p'
			caso 's':
				retorne 'q'
			caso 't':
				retorne 'r'
			caso 'u':
				retorne 's'
			caso 'v':
				retorne 't'
			caso 'w':
				retorne 'u'
			caso 'x':
				retorne 'v'
			caso 'y':
				retorne 'w'
			caso 'z':
				retorne 'x'
			caso '0':
				retorne '9'
			caso '1':
				retorne '0'
			caso '2':
				retorne '1'
			caso '3':
				retorne '2'
			caso '4':
				retorne '3'
			caso '5':
				retorne '4'
			caso '6':
				retorne '5'
			caso '7':
				retorne '6'
			caso '8':
				retorne '7'
			caso '9':
				retorne '8'
			caso contrario:
				retorne l
		}
	}

	funcao cadeia criptografar(cadeia texto){
		cadeia nova = ""
		caracter letra
		inteiro i, tam = Texto.numero_caracteres(texto)

		para(i = 0; i < tam; i++){
			letra = codificar(Texto.obter_caracter(texto, i))
			nova = nova + letra
		}
		retorne nova
	}

	funcao cadeia descriptografar(cadeia texto){
		cadeia nova = ""
		caracter letra
		inteiro i, tam = Texto.numero_caracteres(texto)

		para(i = 0; i < tam; i++){
			letra = decodificar(Texto.obter_caracter(texto, i))
			nova = nova + letra
		}
		retorne nova
	}
	
	funcao inicio(){
		cadeia texto = "abre a porta mariquinha. 123...9"

		escreva("Frase:\t\t\t", texto)
		escreva("\n")
		texto = criptografar(texto)
		escreva("Criptografada:\t\t", texto)
		escreva("\n")
		texto = descriptografar(texto)
		escreva("Descriptografada:\t", texto)
		escreva("\n")
	}
}

Deixe um comentário

dezoito − 7 =

Wagner Gaspar

Capixaba de São Gabriel da Palha, Espírito Santo. Bacharel em Ciência da Computação pela Universidade Federal do Amazonas e mestre em informática pela Universidade Federal do Espírito Santo.