1
+ #lang racket
2
+
3
+ ; Define la función principal que realiza el cifrado César
4
+ (define (cesar-encrypt text shift)
5
+ (if (string=? text "" ) ; Verifica si la cadena de texto está vacía
6
+ "" ; Si está vacía, retorna una cadena vacía
7
+ ; Si no está vacía, concatena el carácter cifrado con el resto de la cadena cifrada
8
+ (string-append (cesar-shift (string-ref text 0 ) shift) ; Obtiene el primer carácter de la cadena y lo cifra
9
+ (cesar-encrypt (substring text 1 ) shift)))) ; Recursivamente cifra el resto de la cadena
10
+
11
+ ; Define la función que realiza el cifrado César en un solo carácter
12
+ (define (cesar-shift char shift)
13
+ (define base (if (char-upper-case? char) 65 97 )) ; Define el código ASCII base dependiendo si el carácter es mayúscula o minúscula
14
+ (if (char-alphabetic? char) ; Verifica si el carácter es alfabético
15
+ ; Si es alfabético, realiza el cifrado César y retorna el carácter cifrado
16
+ (string (integer->char (+ base (modulo (+ (- (char->integer char) base) shift) 26 ))))
17
+ (string char))) ; Si no es alfabético, retorna el carácter sin cambiar
18
+
19
+ ; Probar la función de cifrado
20
+ (displayln (cesar-encrypt "mundo " 13 ))
21
+
22
+ ; La función cesar-encrypt se encarga de recorrer cada carácter de la cadena de entrada y aplicarle
23
+ ; el cifrado César. Esta función utiliza un enfoque recursivo. En cada paso de la recursión, se toma
24
+ ; el primer carácter de la cadena, se cifra y se concatena con el resultado de la encriptación del
25
+ ; resto de la cadena. Esto se repite hasta que todos los caracteres de la cadena se han cifrado.
26
+
27
+ ; La función cesar-shift realiza el cifrado César para un solo carácter. En primer lugar, determina si
28
+ ; el carácter es una letra mayúscula o minúscula para establecer el código ASCII base (65 para mayúsculas
29
+ ; y 97 para minúsculas). Luego, si el carácter es una letra (alfabético), se le aplica el cifrado César; si no, se deja sin cambios.
30
+
31
+ ; El cifrado César en sí se realiza sumando el desplazamiento al valor ASCII del carácter,
32
+ ; sustraído el valor base para mantener el valor dentro del rango alfabético. Luego, se aplica
33
+ ; la operación de módulo por 26 (el número de letras en el alfabeto) para asegurar que el cifrado
34
+ ; es cíclico, es decir, después de 'z' o 'Z', el cifrado sigue con 'a' o 'A'. Luego se agrega el valor
35
+ ; base nuevamente y se convierte el valor numérico resultante de nuevo a un carácter.
0 commit comments