Ir al contenido principal

Entradas

Mostrando entradas de 2025

Criptografía (CCC): Cifrado Delastelle (cifrado bífido)

El cifrado de Delastelle fue inventado por el francés Félix-Marie Delastelle (1840-1902), y presenta dos variantes: la cifra bífida y la cifra trífida. En este post me voy a referir a la primera de ellas. En este criptosistema se transforma cada par de letras del mensaje original en una dupla de números de acuerdo con una tabla de Polibio con la clave que se haya elegido, escribiéndose los dos dígitos en vertical debajo del caracter correspondiente. Después, para obtener el criptograma, se leen los dígitos en horizontal de la primera fila (dígitos correspondientes a las filas de cada caracter) seguidos de los de la segunda fila (dígitos correpondientes a las columnas de cada caracter), y, finalmente, cada par de dígitos así obtenidos se transforma en el caracter que le corresponda conforme a la tabla de polibio empleada. Si el mensaje a cifrar tuviera un número impar de caracteres se añade al final un caracter de relleno (normalmente, 'X'). Veamos un ejemplo: Supongamos que q...

Criptografía (CCXCIX): ¿Sabías que...? (XXVIII)

Si alguien creía que con el post anterior , sobre las runas que aparecen en  "El Hobbit" de JRR Tolkien, había alcanzado mi nivel máximo de "frikismo", está claro que se equivocaba. En este post voy a hablar sobre las tengwar, un sistema de escritura basado en las lenguas que inventó JRR Tolkien y que aparece, entre otras de sus obras, en "El Señor de los Anillos". En el universo Tolkien, numerosas lenguas de la Tierra Media, como el quenya y sindarin, emplean la escritura tengwar. Aunque están diseñadas para los idiomas élficos, también se utilizaron, por ejemplo, en la inscripción del Anillo Único, que está en Lengua Negra, el idioma de Mordor. En mi opinión podrían ser consideradas como un código ("tengwar" es una palabra quenya en plural, cuyo significado es "letras"; el singular sería "tengwa"), al igual que las runas que aparecen en "El Hobbit", de ahí que escribo este post. Las tengwar son un sistema de escri...

Criptografía (CCXCVIII): ¿Sabías que...? (XXVII)

Al igual que en este post sobre "El nombre de la rosa" ('Il nome della rosa') de Umberto Eco, me voy a permitir una licencia, ya que me voy a referir a un código que aparece en la novela "El Hobbit" de JRR Tolkine . Y, también al igual que en el post citado anteriormente, digo ésto porque yo considero que las runas que aparecen en esta obra no pueden ser consideradas como un sistema de cifrado, sino más bien, y a lo sumo, como un sistema de codificación. Dicho ésto, las runas que aparecen en esta novela son una simple variación de las runas anglosajonas, y los dos únicos sitios donde aparecen son: en el mapa de Thrór y en la portada del libro. El texto en claro correspondiente a la primera inscripción (la de debajo de la mano en el mapa) es: "Five feet high the door and three may walk abreast. Th. Th.", es decir, algo así como: "Cinco pies de altura y tres pasan con holgura. Th. Th." . Mientras que el correspondiente a la segunda inscrip...

Criptografía (CCXCVII): Cifrado nihilista

Tal y como nos cuenta wikipedia ,  el cifrado nihilista es un cifrado de clave simétrica (se emplea la misma clave para cifrar que para descifrar) utilizado originalmente por rusos nihilistas en la década de 1880 para organizar el terrorismo contra el régimen zarista. Consiste en cifrar el texto en claro mediante una tabla de Polibio con una clave, y, una vez hecho ésto, cifrar una segunda clave con la misma tabla, para, finalmente, sumar las parejas de números obtenidos para el texto en claro y para la segunda clave, obteniendo como resultado el criptograma. Pongo un ejemplo: Supongamos que queremos cifrar el mensaje o texto en claro: 'CIFRADO NIHILISTA', con la clave: 'CLAVE', y la segunda clave: 'NIHILISMO. Para ello, lo primero que hay que hacer es crear la tabla de Polibio (5 filas x 5 columnas) introduciendo los caracteres de la clave a partir de la primera fila (quitando posibles caracteres repetidos, es decir, dejando sólo el primer caracter de aquellos qu...

Criptografía (CCXCVI): Crypto (I)

'Crypto' es un pequeño desarrollo , que he realizado en python utilizando tkinter como interfaz gráfico de usuario (GUI), sobre criptografía, criptoanálisis y utilidades relacionadas . En esta primera versión se contemplan únicamente criptosistemas clásicos y unos pocos métodos de criptoanális y utilidades relacionados con éstos, pero la idea es ir completándola para ampiar todos los aspectos que contempla actualmente e incorporar criptosistemas modernos. Al final de este post se puede descargar el ejecutable para 'Windows' de esta primera versión de la aplicación. Descargar Crypto v1.0: Nota : para que los cifrados templario, francmasón y Zodiac funcionen correctamente es necesario tener instaladas las fuentes que se proporcionan junto al ejecutable (TemplarsCipherPlus.otf, PigpenCipher.otf y ZodiacKiller.otf, respectivamente) en la carpeta '/recursos/fuentes'; clic del boton derecho sobre el archivo de fuente a instalar y clic sobre la opción 'Instalar...

Python + Tkinter (VII): El ahorcado

En este post el tradicional juego del ahorcado, al que todos hemos jugado cuando eramos niños (los de mi generación con lápiz y papel), desarrollado en python con tkinter como interface gráfico de usuario (GUI). El juego consiste en adivinar una palabra letra a letra. Tras cada fallo se va añadiendo una parte del dibujo del ahorcado. El juego se gana si se adivina la palabra antes de que se complete el dibujo, perdiéndose si no se logra esto. La lista de palabras con las que se juega se ha obtenidos de las 10.000 formas más frecuentes en español que figuran en la página web de la Real Academia Española (RAE) . En concreto, el número de palabras por caracteres en las mismas es el siguiente: - Palabras de 5 caracteres: 1.250 - Palabras de 6 caracteres: 1.488 - Palabras de 7 caracteres: 1.670 - Palabras de 8 caracteres: 1.526 - Palabras de 9 caracteres: 1.156 - Palabras de 10 caracteres: 830 Como siempre, al final de este post se podrán descargar tanto el ejecutable de windows como el re...

Python + Pygame (XXXII): Tutorial - Colisiones precisas (II)

En el post anterior puse un script para poder apreciar la diferencia de precisión existente entre las colisiones basadas en los rectángulos delimitadores de los sprites y aquellas basadas en las máscaras de sus formas, y en éste voy a poner un script de ejemplo de la utilización de la colisión por máscaras en un videojuego 2D, para lo que tomo otra vez como referencia uno de mis video juegos tipo arcade y género plataformas preferido, además de ser uno de los más populares de todos los tiempos: 'Donkey Kong'. Para este script de ejemplo parto del que incluí en la última entrada del tutorial correspondiente a 'Salto de personajes' . El script final, sobre el que, tras leer el  post anterior ,  no creo que haya que realizar explicaciones adicionales a los comentarios que en él figuran, es el siguiente: #!/usr/bin/env python # -*- coding: utf-8 -*- # # COLISIONES PRECISAS (MÁSCARAS): # # Colisiones entre sprites utilizando el método pygame.sprite.collide_mask(). # # Autor...

Python + Pygame (XXXI): Tutorial - Colisiones precisas (I)

En este blog ya he puesto algunos tutoriales sobre aspectos que posiblemente tengamos que implementar a la hora de programar un videojuego (arrastrar objetos mediante el ratón, el salto de personajes, etc.), y en este post pongo un pequeño tutorial respecto a quizá el aspecto más frecuente con el que nos encontraremos: las colisiones entre sprites, y, en concreto, me voy a referir a las colisiones precisas entre éstos. En la mayoría de los videojuegos nos bastará con las colisiones entre los rectángulos que delimitan los sprites, sin mayor precisión, pero en ocasiones necesitaremos la detección de las colisiones respecto a la forma del sprite, es decir, necesitaremos una mayor precisión en las mismas. En este tutorial voy a tomar como referencia dos de los videojuegos tipo arcade más famosos de todos los tiempos: 'Space invaders' y, al igual que en el último tutorial, 'Donkey Kong'. Me explico: en muchos juegos la forma de los sprites encaja o difiere poco de una forma ...