La historia del cifrado César

El cifrado César es una de las técnicas de codificación más básicas que existen, si bien es una excelente e interesante forma de iniciarse en el mundo del cifrado. En su forma original consiste en trasladar las palabras del texto a cifrar un número determinado de posiciones en el alfabeto. Este número de posiciones será la clave que necesitaremos para descifrar más tarde nuestro mensaje. Así en un simple ejemplo si quisiéramos cifrar la letra con una clave 6, simplemente desplazaríamos nuestra letra 6 posiciones en el alfabeto: a, b, c, d, e, f, g. Para descifrar la g, repetiríamos el proceso pero en orden contrario: g, f, e, d, c, b, a.

En esta imagen se muestra la codificación de la palabra 'HOLA' con una clave = 13.
Mapa con las conquistas de Cayo Julio César

Como podrías estar pensando, el cifrado César algo tiene que ver con el César que todos conocemos: Cayo Julio César. Resulta que allá por el 80a.c, este indiscutible genio militar precisaba de un mecanismo seguro para comunicarse con sus generales. Como entenderás, por aquel entonces era difícil incluso encontrarse con un enemigo que supiera leer, y mucho más difícil que supiera leer latín. Pero como al imperio Romano le dio por poner, a base de sangre y fuego esta lengua de moda, nuestro amigo tuvo tomar precauciones y buscarse otra forma de comunicar sus famosas estrategias. Y mirando el mapa de sus conquistas de la derecha, suponemos que este mecanismo fue bastante eficiente. Algo digno de mencionar es que la clave que empleaba era siempre la misma: 3, pues de esta forma lograba sincronizar receptores y emisores sin necesidad de mandar mensajeros de más que transportaran una clave distinta junto a cada mensaje.

Si tenía que decir algo confidencial, lo escribía usando el cifrado, esto es, cambiando el orden de las letras del alfabeto, para que ni una palabra pudiera entenderse. Si alguien quiere decodificarlo, y entender su significado, debe sustituir la cuarta letra del alfabeto, es decir, la D por la A, y así con las demás.

Suetonio, Vida de los Césares 56
El cifrado César es, además, una bonita forma de iniciarse e el mundo de la programación. En el siguiente enlace podrás encontrar el código en Java de este cifrado: http://www.archecode.org/es/blog/cifrado-cesar-escrito-en-java/

Introducir texto/palabra por teclado vía terminal en Java

En este lenguaje encontramos múltiples formas de introducir texto por teclado mediante una terminal. A continuación expongo las principales mediante un simple código. Recomiendo usar JDK 1.7 o superior y una terminal, ya sea de un sistema Linux o Windows.

*Si decides ejecutar el código desde un IDE como eclipse, la última opción no funcionará ya que, como su nombre indica, está pensada para ser usada desde la terminal.

Si te queda alguna duda tras leerlo todo, siempre te quedarán los comentarios 😉

[code language="java"]
// En función de los métodos empleados, importar una u otra librería
import java.util.Scanner;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.io.Console;

public class Consola {
public static void main(String[] args) {
String texto = null;
// Librerías: import java.util.BufferedReader; y import java.io.IOException;
// Nota: Permite introducir espacios y saltos de línea
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Introduce algún texto: ");
try {
texto = reader.readLine();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("Texto introducido: " + texto);

// Da uso a import java.util.Scanner; A partir de Java 5
// Nota: Hay que cuidar el buffer IO. De tener varios sc.nextLine() este acabará desbordando.
Scanner sc = new Scanner(System.in);
System.out.print("Introduce algún texto: ");
texto = sc.nextLine();
System.out.println("Texto introducido: " + texto);

// Dependencia: import java.io.Console;
// Nota: Desde Java 6, la opción más recomendada para leer por consola
Console consola = System.console();
texto = consola.readLine("Introduce algún texto: ");
System.out.println("Texto introducido: " + texto);
}
}
[/code]

Fuente