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
Kotlin es un lenguaje de programación de tipado estático que corre sobre la máquina virtual de Java y que también puede[...]
Hola 🙂 en esta ocasión un amigo del Brasil nos envía un proyecto java de una Urna Electrónica o Voto Electronico, desarr[...]
En esta ocasión aprenderemos a conectaros con una base de datos Oracle desde Laravel. Es un tutorial sencillo y cortito,[...]
La Ordenación de burbuja (Bubble Sort en inglés) es un sencillo algoritmo de ordenamiento. Este algoritmo es esencialmen[...]
Un esquema XSD se utiliza para describir y validar la estructura y contenido de los datos de un documento XML. Un esquem[...]
MVC es un patrón de arquitectura de software que separa una aplicación en tres componentes lógicos principales. Estos s[...]