Posts Tagged “Informática”

El cifrado César o por desplazamiento es una de las formas más simples de ocultar mensajes, aunque también una de las más fáciles de descifrar. El método no tiene más misterio que desplazar cada letra un número determinado de posiciones dentro del alfabeto de forma cíclica, es decir, si se llega al final se vuelve a empezar por el principio. Por ejemplo, con un desplazamiento de 3 posiciones a la derecha.

Alfabeto sin cifrar: ABCDEFGHIJKLMNÑOPQRSTUVWXYZ.
Alfabeto cifrado: DEFGHIJKLMNÑOPQRSTUVWXYZABC.

Texto sin cifrar: Estoy leyendo Okashini
Texto cifrado:
Hvwrb ohbhqgr Rndvklql

El origen del cifrado lo encontramos hace más de 2.000 años. Corría el siglo I a.C cuando Julio César utilizó este cifrado con un desplazamiento de 3 posiciones a la derecha para ocultar mensajes en tiempos de guerra.

El descifrado es igual de sencillo si se conoce el número de desplazamientos que hay que realizar. Si no se conoce hay que trabajar algo más, aunque solamente habría que probar todas las combinaciones posibles, probando las primeras palabras hasta encontrar alguna frase coherente, y después traducir todo el texto. Podrían parecer demasiadas combinaciones, pero en el caso de nuestro alfabeto actual son solamente 27 posibilidades, pocas en comparación con otros cifrados. ¿Os imagináis que hubiera la misma cantidad que kanjis japoneses o hanzis chinos?

  • Vjkf vj le kvokf tzwiruf r kirmvj uvc dvkfuf Tvjri tfe 43 gfjztzfevj uv uvjgcrqrdzvekf r cr uvivtyr.

¿Podéis descifrarlo?

Como curiosidad, este cifrado se utiliza para otros más complejos como el de Vigenère.

¿Conocéis otros sistemas de cifrado?

Para los más técnicos, os dejo un programa en C++ que codifica textos.

// Cifrado César
// No se cifran letras con tilde, ñ, ç, ...

#include <iostream>
#include <string>
using namespace std;

void cesar(const string& s, int n) {
    for(int i = 0; i < s.size(); ++i) {
        char c = s[i];
        if(c >= 'a' and c <= 'z') {                         // Minúsculas
            if(c+n>'z') cout << char('a'+c+n-'z'-1);
            else cout << char(c+n);
        }
        else if(c >= 'A' and c <= 'Z') {                    // Mayúsculas
            if(c+n>'Z') cout << char('A'+c+n-'Z'-1);
            else cout << char(c+n);
        }
        else cout << c;
    }
}

int main() {
    int n;                  // Número de posiciones a desplazar
    cin >> n;
    n %= 26;
    string s;
    while(cin >> s) {
        cesar(s, n);
        cout << ' ';
    }
    cout << endl;
}
Etiquetas: ,

Comments Sin comentarios »

Si piensas que los usuarios de tus programas son idiotas, sólo los idiotas usarán tus programas

Linus Torvalds, ingeniero de Software finlandés y creador del primer kernel de GNU/Linux

Etiquetas: ,

Comments Sin comentarios »

¿Qué hago con todos estos discos duros?
No sé, ¿sirven para algo?
Ni idea
Ysi los ponemos todos en línea y…


Etiquetas: , , , ,

Comments 2 Comentarios »

sandwich1

Hazme un sandwich
¿QUÉ? Hazlo tú
Sudo Hazme un sandwich
Vale

Para que el que no lo entienda, sudo es un comando para ejecutar comandos con privilegio de superusuario

Etiquetas: , , , ,

Comments 2 Comentarios »

¿Sabías qué…? es un vídeo sobre el avance tecnológico de hoy y el del futuro, muy interesante.

Etiquetas: , ,

Comments Sin comentarios »

El juego de la vida es, según la Wikipedia, un ejemplo de aútomata celular, y uno de los orígenes de la vida artificial. La aplicación consiste en la relación de diferentes ‘células’ que siguen unas sencillas normas, dependiendo de la situación, la célula desaparecerá, duplicará, etc. La situación puede acabar de 3 maneras diferentes: situación estable (las células no se mueven ni se destruyen), destrucción de todas las células, o creación de un sistema con movimiento o bucle.

Enlaces relacionados:

|Jugar al juego de la vida

Etiquetas: , ,

Comments Sin comentarios »

Canonical URL by SEO No Duplicate WordPress Plugin