En criptografía, el cifrado César, también conocido como cifrado por desplazamiento, código de César o desplazamiento de César, es una de las técnicas de cifrado más simples y más usadas. Es un tipo de cifrado por sustitución en el que una letra en el texto original es reemplazada por otra letra que se encuentra un número fijo de posiciones más adelante en el alfabeto. Por ejemplo, con un desplazamiento de 3, la A sería sustituida por la D (situada 3 lugares a la derecha de la A ), la B sería reemplazada por la E, etc. Este método debe su nombre a Julio César, que lo usaba para comunicarse con sus generales.[wikipedia]
Solución en C#
01 using System; 02 using System.Collections.Generic; 03 using System.Linq; 04 using System.Text; 05 06 namespace Cesar 07 { 08 class Program 09 { 10 static string abc = "abcdefghijklmñnopqrstuvwxyzABCDEFGHIJKLMNÑOPQRSTUVWXYZ1234567890_-+,#$%&/()=¿?¡!|,.;:{}[]"; 11 12 static void Main(string[] args) 13 { 14 15 String mensaje = "Cada vez que escucho hablar de ese gato, empiezo a sacar mi pistola [en relación a la Paradoja de Schrödinger]"; 16 17 //se cifra el mensaje 18 string tmp = cifrar(mensaje, 10); 19 20 21 Console.WriteLine( "Mensaje cifrado: \"{0}\" \n\n",tmp );//se muestra en pantalla 22 23 //se descifra el mensaje 24 Console.WriteLine("Mensaje descifrado: \"{0}\" \n\n", descifrar(tmp, 10)); 25 26 //si se descifra con un desplazamiento diferente al que se uso para cifrar 27 //el mensaje sera el equivocado 28 Console.WriteLine("Mensaje descifrado con desplazamiento equivocado:\n \"{0}\"", descifrar(tmp, 7)); 29 30 Console.ReadKey(); 31 } 32 33 34 static string cifrar(string mensaje, int desplazamiento) 35 { 36 String cifrado = ""; 37 if ( desplazamiento > 0 && desplazamiento < abc.Length ) 38 { 39 //recorre caracter a caracter el mensaje a cifrar 40 for (int i = 0; i < mensaje.Length; i++) 41 { 42 int posCaracter = getPosABC(mensaje[i]); 43 if (posCaracter != -1) //el caracter existe en la variable abc 44 { 45 int pos = posCaracter + desplazamiento; 46 while (pos >= abc.Length) 47 { 48 pos = pos - abc.Length; 49 } 50 //concatena al mensaje cifrado 51 cifrado += abc[pos]; 52 } 53 else//si no existe el caracter no se cifra 54 { 55 cifrado += mensaje[i]; 56 } 57 } 58 59 } 60 return cifrado; 61 } 62 63 /* 64 * El descifrado cesar es el procedimiento inverso al cifrado 65 */ 66 static string descifrar( string mensaje, int desplazamiento ) 67 { 68 String cifrado = ""; 69 if (desplazamiento > 0 && desplazamiento < abc.Length) 70 { 71 for (int i = 0; i < mensaje.Length; i++) 72 { 73 int posCaracter = getPosABC(mensaje[i]); 74 if (posCaracter != -1) //el caracter existe en la variable abc 75 { 76 int pos = posCaracter - desplazamiento; 77 while ( pos < 0 ) 78 { 79 pos = pos + abc.Length; 80 } 81 cifrado += abc[pos]; 82 } 83 else 84 { 85 cifrado += mensaje[i]; 86 } 87 } 88 89 } 90 return cifrado; 91 } 92 93 /* obtiene la posicion del caracter pasado como parametro 94 * en la variable abc que es nuestro abecedario de cifrado/descifrado 95 */ 96 static int getPosABC( char caracter ) 97 { 98 for( int i=0; i< abc.Length ; i++) 99 { 100 if (caracter == abc[i]) 101 { 102 return i; 103 } 104 } 105 return -1; 106 } 107 108 109 } 110 }
Para este ejemplo ciframos una frase de Stephen Hawking:
«Cada vez que escucho hablar de ese gato, empiezo a sacar mi pistola [en relación a la Paradoja de Schrödinger]«
Salida en pantalla
El procesamiento por lotes (batch processing) en PHP es la ejecución de tareas que implican una gran cantidad de datos u[...]
Una Vista (View) es una Tabla Virtual cuyo contenido está definido por una consulta (SELECT), al igual que una tabla rea[...]
Hace un par de años atras google para el aniversario del juego de Pacman saco un doodle en su homenaje, ese doodle que s[...]
El CRC o Verificación de Redundancia Cíclica o Comprobación de redundancia cíclica es una técnica utiliz[...]
En este post veremos como imprimir secciones de un formulario en java implementando la Interface Printable. La clase que[...]
El SystemTray/Bandeja del Sistema o como también se le llama «Área de Notificación» es la sección de la barra de tareas[...]