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 modelo Tweetbotornot es un algoritmo de aprendizaje automático que se entrenó en miles de cuentas reales de bot y no[...]
En este post haremos uso de PanoramaImageView para agregar a una aplicación android, una vista panorámica de 180° y 360°[...]
En este post veremos un ejemplo sencillo de encriptación/desencriptación simétrica que el API de Java nos permite realiz[...]
Ejercicio: Escriba un programa en consola que implemente un Hashtable, cree una clase «Persona«, este será el tipo de da[...]
En este post vemos un ejemplo de como convertir un archivo de imagen JPG en un archivo PDF utilizando para ellos la libr[...]
En este post se da respuesta a una pregunta realizada por facebook. El problema dice así: Se quiere personalizar un JTab[...]