CIFRADO CESAR
Ejemplo hecho en java para cifrar mensajes basados en el cifrado
cesar. Hay muchos tipos de cifrado y mucho mas complejos pero este es un
ejemplo sencillo de lo que es el cifrado, y puedes usar otros mas complejos
Descripción
Uno de los criptosistemas más antiguos se lo
debemos a Julio César. El método es bastante sencillo, está basado en
sustituciones: la letra cifrada se obtiene a partir de la original
desplazándola k posiciones a la derecha. El alfabeto se
considera cíclico, esto es que la letra siguiente a la z es la a y
que la anterior a la a es la z.
La llave (clave) de este cifrado es el valor de k
que se ha usado para cifrar el texto, y este valor debe permanecer secreto, ya
que si se hace público, cualquiera podría descifrar el texto de forma fácil,
con sólo desplazar a la izquierda las letras del texto cifrado k lugares
a la izquierda.
A cada letra
se le asigna un código numérico que no es más que su posición en el alfabeto,
la codificación de las letras es por tanto:
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
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
20 21 22 23 24 25 26
De una forma
más formal el cifrado de César se puede definir como:
E sub k = (i+k) mod q
donde i mod n denota al único
entero j entre 0 y n-1 tal
que j es congruente con i módulo n.
Además, q representa el total del letras del alfabeto (en el caso del
castellano q = 27), i el índice de letra que se quiere
cifrar y k el desplazamiento que se va a aplicar. Se supone que tanto k como i están
entre 0 y q-1 (ambos extremos incluidos), por tanto
tendremos q cifrados de César diferentes, uno para cada valor de k que
escojamos. El desplazamiento que aplicaba César era k = 3 según los
documentos de la época, aunque luego el cifrado se generalizó al que se ha
expuesto anteriormente.
Veamos
algunos ejemplos:
E sub 26 (IBM) = HAL
E sub 6 (HOLA) = NUQA
E sub 1(PATATA) = QBUBUB
Criptoanálisis
El criptoanálisis de textos cifrados
con este método va a ser muy fácil, ya que existen sólo 27 llaves (claves).
Además, como con todos los cifrados monoalfabéticos, se van a mantener las
frecuencias de aparición de las letras del alfabeto. En este caso estarán desplazadas según la
llave que se haya escogido.
Fuerza bruta
Ya
que sólo existen 27 llaves posibles, se trata de ir probando cada uno de los
posibles desplazamientos hasta que el texto cifrado cobre sentido. Vamos a
intentar descifra el texto:
JYOWAVNYHMOH:
JYOWAVNYHMOH:
0 JYOWAVNYHMOH
1 KZPXBWÑZINPI
2 LAQYCXOAJÑQJ
3 MBRZDYPBKORK
4 NCSAEZQCLPSL
5 ÑDTBFARDMQTM
6 OEUCGBSENRUN
7 PFVDHCTFÑSVÑ
8 QGWEIDUGOTWO
9 RHXFJEVHPUXP
10 SIYGKFWIQVYQ
11 TJZHLGXJRWZR
12 UKAIMHYKSXAS
13 VLBJNIZLTYBT
14 WMCKHJAMUZCU
15 XNDLOKBNVADV
16 YÑEMPLCÑWBEW
17 ZOFNQMDOXCFX
18 APGÑRNEPYDGY
19 BQHOSÑFQZEHZ
20 CRIPTOGRAFIA
21 DSJQUPHSBGJB
22 ETKRVQITCHKC
23 FULSWRJUDILD
24 GVMTXSKVEJME
25 HWNUYTLWFKNF
26 IXÑVZUMXGLÑG
Como
podemos observar la prueba numerada como 20 contiene el texto llano
correspondiente a nuestro texto cifrado. Por tanto el texto JYOWAVNYHMOH se
descifra como CRIPTOGRAFIA.
Análisis estadístico del texto
Supongamos
que nos encontramos con el siguiente texto cifrado:
Edqjnrn qr hud od flxgdg iuhvfd b
wudqtxlod gh whpsorv b fdqdohv
txh br hvshuded. Ho oxjdu kdeld
shuglgr vx ruljlqdo fdudfwhu wdl
kdvwd wdo sxqwr txh or txh txhgded
uhvxowded devxugr b shuyhuvr
hq phglr gh wdq dfxvdgd
rfflghqwdolcdflrq. Orv uhvlghqwhv
hawudqmhurv hvwdedq gh dfxhugr hq txh
kdeld vlgr xq oxjdu
kdelwdeoh kdvwd txh oohjdurq odv
wursdv hvwdgrxqlghqvhv.
Lo primero que hay que hacer es hacer
un análisis estadístico del texto cifrado y ver cuáles son las letras más
frecuentes, que en este caso son d, h, v, u y r, y se intentan sustituir por las letras más
frecuentes del castellano, que según la gráfica anterior son:e, a, o, s y n.
Probamos a sustituir la d por la e,
esto significa que estamos suponiendo que el texto se cifró con E sub 26, ya
que d = (e +
26) mod 27 , luego si deshacemos los veintiséis desplazamientos a la derecha
que hace E sub 26 tenemos que la primera palabra del texto Edqjnrn pasa a ser Dcpimqm,
que no tiene mucho sentido en castellano. Luego parece que E sub 26 no se usó
para cifrar el texto.
Vamos a probar ahora a sustituir la
segunda letra más probable del texto cifrado, h por la e a
ver si hay mejor suerte. Este cambio supone que para cifrar se usó E sub 3.
Probemos pués con la primera palabra a ver si toma sentido. Edqjnrn se convierte en Bangkok,
que parece una palabra castellana. Para asegurarnos si verdaderamente hemos
encontrado la llave vamos a probar ahora con la palabra flxgdg. Esta palabra pasa a ser ciudad, que es claramente una palabra castellana.
Desciframos el resto del texto y obtenemos:
que yo esperaba. El lugar había
perdido su original carácter tai hasta
de tan acusada occidentalización. Los
residentes extranjeros
Luego
ya sabemos que la llave que se ha usado para cifrar el texto ha sido 3 y
tenemos descifrado el texto.
Este texto ha sido extraído de Memorias de un nómada, de Paul Bowles.
if((charMin.indexOf(entrada.charAt(i)) != -1) ||
(charMay.indexOf(entrada.charAt(i)) != -1))
EJEMPLO DE CIFRADO HECHO EN JAVA
import java.io.BufferedReader;
import
java.io.IOException;
import
java.io.InputStreamReader;
public class
CifradoCesar {
static String charMin = "abcdefghijklmnopqrstuvwxyz";
static String charMay = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
static BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
public static void main(String[] args){
try {
String texto = "";
int n = 0;
System.out.println("Texto a cifrar");
texto = bf.readLine();
System.out.println("Desplazamiento para el cifrado.(numero entero)");
n =
Integer.parseInt(bf.readLine());
System.out.println(n);
System.out.println("Texto: "+texto);
System.out.println("Texto cifrado: "+cifCesar(texto,n));
} catch
(Exception e) {
System.out.print("Valor no valido.");
}
}
private static String cifCesar(String entrada,int desp){
String salida = "";
for(int i = 0;i<entrada.length();i++){
// obtiene posicion de la entrada
? charMin.charAt((
(charMin.indexOf(entrada.charAt(i)) )+desp) %charMin.length() )
: charMay.charAt(( charMay.indexOf(entrada.charAt(i))
+desp)%charMay.length());
else
salida += entrada.charAt(i);
}
return salida;
}
} --------------------Configuration:
<Default>--------------------
Texto a cifrar
ejemplo de cifrado
Desplazamiento para el cifrado.(numero entero)
3
Texto: ejemplo de cifrado
Texto cifrado: hmhpsor gh fliudgr
Process completed.
Thanks for sharing, nice post!
ResponderEliminarPhục vụ cho nThanks for sharing, nice post!
Phục vụ cho nhu cầu vận chuyển hàng hóa bắc nam bằng đường sắt ngày càng lớn, dịch vụ vận chuyển ô tô bằng đường sắt và vận tải, gửi hàng hóa gửi xe máy bắc nam bằng tàu hỏa bằng đường sắt cũng đã xây dựng nên những qui trình, dịch vụ vận chuyển container lạnh bắc nam chuyên nghiệp và có hệ thống. Đảm bảo mang đến chất lượng tốt nhất cho khách hàng sử dụng dịch vụ.
hu cầu vận chuyển hàng hóa bắc nam bằng đường sắt ngày càng lớn, dịch vụ vận chuyển ô tô bằng đường sắt và vận tải, gửi hàng hóa gửi xe máy bắc nam bằng tàu hỏa bằng đường sắt cũng đã xây dựng nên những qui trình, dịch vụ vận chuyển container lạnh bắc nam chuyên nghiệp và có hệ thống. Đảm bảo mang đến chất lượng tốt nhất cho khách hàng sử dụng dịch vụ.