Skip to content
ExamplesEspañolWorkspace →

Caesar Cipher

Encrypts a message by shifting each letter of the alphabet.

Level
Advanced
Topic:
Text
Concepts:
Input & output
Text
Para
Math
Open in Codoritmo

Run, change and debug this example in your browser.

What you'll learn

A nested Para loop finds each letter in the alphabet with Subcadena. MOD wraps around so that after z you start again at a.

Code

caesar-cipher.psc · 28 lines
Algoritmo CifradoCesar    Definir abecedario, mensaje, cifrado, letra Como Caracter    Definir desplazamiento, i, j, posicion, nueva Como Entero    abecedario <- "abcdefghijklmnopqrstuvwxyz"    Escribir "Mensaje a cifrar:"    Leer mensaje    Escribir "Desplazamiento (1 a 25):"    Leer desplazamiento    cifrado <- ""    Para i <- 1 Hasta Longitud(mensaje) Hacer        letra <- Minusculas(Subcadena(mensaje, i, i))        // Buscamos la letra en el abecedario        posicion <- 0        Para j <- 1 Hasta 26 Hacer            Si Subcadena(abecedario, j, j) = letra Entonces                posicion <- j            FinSi        FinPara        Si posicion = 0 Entonces            cifrado <- cifrado + letra        SiNo            // MOD hace que después de la z vuelva a empezar en la a            nueva <- (posicion - 1 + desplazamiento) MOD 26 + 1            cifrado <- cifrado + Subcadena(abecedario, nueva, nueva)        FinSi    FinPara    Escribir "Mensaje cifrado: ", cifradoFinAlgoritmo

Flowchart

Each block in the flowchart matches one instruction in the code.

Algoritmo CifradoCesarSíNoSíNoAlgoritmo CifradoCesarAlgoritmo CifradoCesarDefinir abecedario, mensaje, cifrado, letra Como CaracterDefinir abecedario, mensaje,cifrado, letra Como CaracterDefinir desplazamiento, i, j, posicion, nueva Como EnteroDefinir desplazamiento, i, j,posicion, nueva Como Enteroabecedario <- "abcdefghijklmnopqrstuvwxyz"abecedario <-"abcdefghijklmnopqrstuvwxyz"Escribir "Mensaje a cifrar:"Escribir "Mensaje a cifrar:"Leer mensajeLeer mensajeEscribir "Desplazamiento (1 a 25):"Escribir "Desplazamiento (1 a25):"Leer desplazamientoLeer desplazamientocifrado <- ""cifrado <- ""Para i <- 1 Hasta Longitud(mensaje) HacerPara i <- 1 HastaLongitud(mensaje)letra <- Minusculas(Subcadena(mensaje, i, i))letra <-Minusculas(Subcadena(mensaje,i, i))posicion <- 0posicion <- 0Para j <- 1 Hasta 26 HacerPara j <- 1 Hasta 26Si Subcadena(abecedario, j, j) = letra EntoncesSubcadena(abecedario, j, j) = letraposicion <- jposicion <- jSi posicion = 0 Entoncesposicion = 0cifrado <- cifrado + letracifrado <- cifrado + letranueva <- (posicion - 1 + desplazamiento) MOD 26 + 1nueva <- (posicion - 1 +desplazamiento) MOD 26 + 1cifrado <- cifrado + Subcadena(abecedario, nueva, nueva)cifrado <- cifrado +Subcadena(abecedario, nueva,nueva)Escribir "Mensaje cifrado: ", cifradoEscribir "Mensaje cifrado: ",cifradoFinAlgoritmoFinAlgoritmo

Sample run

This is what the program shows when it runs. The answers typed by the user are highlighted.

Mensaje a cifrar:User answer: nos vemos a las ochoDesplazamiento (1 a 25):User answer: 3Mensaje cifrado: qrv yhprv d odv rfkr

Challenge

Add an option to decrypt a message that is already encrypted.

Show hint

Decrypting is the same as encrypting with a shift of 26 minus the original one.

Open in Codoritmo
  • Palindromes

    Checks whether a phrase reads the same forwards and backwards.

    Intermediate
  • Count Vowels

    Counts the vowels, spaces and other characters in a text.

    Intermediate
  • Roman Numerals

    Converts a number from 1 to 3999 into Roman numerals.

    Advanced