Skip to main content

Cifrado César con añadidos de fantasia, permite encriptar y desencriptar mensajes

Project description

Magical Cipher Disk

Tabla de Contenido

Inspiración

Este proyecto surgio por la necesidad de tener que encriptar mensajes para mis jugadores de D&D, queria hacer cifrados pero con añadidos de fantasia, si bien podria haberlos hecho a mano, teniendo este proyecto todo eso me resutlaria mas facil.

Esta basado en el Cifrado de César, simples discos que rotan y usan un Index para determinar el cifrado.

Las mecanicas añadidas son en base a fantasia, con piedras magicas que actuan como transformadores extra o aplican reglas especiales.

Mécanicas

Este cifrado tiene * mecanicas.

Stones

Las mas importantes, definen mayormente las reglas y comportamiento del cifrado, desde si debe hacerse o debe saltarse, debe cambiarse la letra ciertas posiciones, o incluso cambiarse por la letra al lado contrario del disco.

Por ahora hay 3 tipos de colores, y este color es el que dicta esas reglas.

  • YELLOW: Bateria del cifrado, si esta no esta presente entonces ninguna otra piedra se activara.

  • RED-GREEN: Es como una moneda de 2 caras, cambiara la letra por una posicion en sentido del reloj o a la inversa.

  • BLUE: Cambiara la letra por la opuesta en el disco.

Cada piedra puede tener un valor, que servira para una u otra cosa en esa piedra.

  • YELLOW: Cada cuanto se activaran las demas piedras, si su valor es 3 entonces cada 3 letras aplicaran las demas piedras. Su valor maximo sera 4 y si sobrepasa este numero sera como comenzar el conteo denuevo. Por ejemplo 7 sera 3 y 9 sera 1. Este servira como un Tempo.

  • RED-GREEN: Cuantas posiciones se añadiran a la letra para cambiar su valor. Puede ser negavito o positivo.

  • Blue: Sera un Tempo propio, cada vez que se cumpla ese tempo la letra se cambiara por su opuesto en el disco.

De esta manera, cada 2 letras se aplicaran las piedras.

stone_yellow = YellowStone(2)
stone_redgreen = RedGreenStone(3)
stone_blue = BlueStone(4)

Stone Holder

Encargado de aplicar las piedras y de llevar un control sobre cada paso realizado.

Aqui se guardaran todas las piedras que quieras aplicar a cierto cifrado.

stone_holder_1 = StoneHolder([
    stone_yellow,
    stone_redgreen,
    stone_blue
])

Disk

Representa uno de los discos del cifrado, especificamente el disco con los caracteres que seran el resultado de la encriptacion.

Un añadido propio a esta mecanica basada en la de César, es que cada disco es como un rompecabezas, que puede estar separado en partes y ordenarse de la manera que se guste despues. como si pasaras de la A-Z en un solo disco a tener A-G, P-Z, H-O. y asi tener un disco de 3 partes y ordenado de manera diferente.

Cada disco que quieras crear tendra que constar con 3 ajustes, el alfabeto, los splits y la seed.

  • Alfabeto: El alfabeto que sera el que sustituira las letras del texto original, ya sea de A-Z o con caracteres especiales como "#?![}.," y demas.

  • Splits: Es una lista de int, cada int dentro de esta lista sera la cantidad de caracteres que determinaran el tamaño de esa parte del disco, si el alfabeto es mas grande y sobras letras entonces se creara un loop usando esa misma lista repetidamente, hasta que no queden mas.

seed: Una semilla para que la parte randomizada pueda replicarse si se necesita.

disk_1 = Disk(
    alphabet = "¿#CDEFGHIJK[}*OPQRSTU?!XYZ",
    splits = [6,7],
    seed = 2025
)

Cipher

La base de todo, no hay mucho que decir de esta parte mas alla de que es donde configuraras el cifrado para su encriptacion o desencriptacion.

Aqui le daras todo lo creado anteriormente para que el cipher este completo.

cipher = Cipher(
    disk = disk_1,
    stone_holder = stone_holder_1,
    seed = 2025,
)

Ademas para configurar el alfabeto que se usara en el mensaje original, y el orden del Disk asi como su Index. Esto es necesario para el cifrado aunque por default tiene valores aleatorios, exceptuando el alfabeto que por default sera el normal de A-Z.

cipher.config_cipher(
    source_alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
    disk_order = ['XS', '¿R', 'O[', 'J#'],
    disk_index = ('Q', 'X')
)

De esta manera el cipher ya habria quedado configurado para su uso, solo quedaria darle un mensaje para encriptarlo o desencriptarlo.

Ademas de decidir si ese mensaje se guarda o no, usando un True o False.

Lo cual podria quedar asi.

mensaje = "Good Morning/Evening GitHub user"

mensaje_encriptado = cipher.Encrypt(mensaje,True)

mensaje_desencriptado = cipher.Decrypt(mensaje_encriptado,False)

Esto procederia a guardarse en un log, para poder ver toda la configuracion del cifrado, tanto las piedras como el disco.

Ejemplo Completo

stone_yellow = YellowStone(2)
stone_redgreen = RedGreenStone(3)
stone_blue = BlueStone(4)

stone_holder_1 = StoneHolder([
    stone_yellow,
    stone_redgreen,
    stone_blue
])

disk_1 = Disk(
    alphabet = "¿#CDEFGHIJK[}*OPQRSTU?!XYZ",
    splits = [6,7],
    seed = 2025
)

cipher = Cipher(
    disk = disk_1,
    stone_holder = stone_holder_1,
    seed = 2025,
)

cipher.config_cipher(
    source_alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
    disk_order = ['XS', '¿R', 'O[', 'J#'],
    disk_index = ('Q', 'X')
)

mensaje = "Good Morning/Evening GitHub user"

mensaje_encriptado = cipher.Encrypt(mensaje)

mensaje_desencriptado = cipher.Decrypt(mensaje_encriptado)

CipherIO

Al final el mensaje sera guardado en un Log, por default en una carpeta que creara llamada "Messages/Encrypted" o "Messages/Decrypted"

Aqui se guardaran las configuraciones usadas tanto de las Piedras como del Cifrado y sus alfabetos y demas.

usando el CipherIO puedes configurar esta ruta, aunque solo hace esto por ahora, a futuro añadire mas funciones a esta parte.

Ademas tendra que ser añadido a la configuracion del cipher para que este comience a usarlo.

logger_1 = CipherIO(
    base_path = "./Messages"
)

cipher = Cipher(
    disk = disk_1,
    stone_holder = stone_holder_1,
    seed = 2025,
    logger = logger_1
)

Changelog

Puedes consultar los cambios y versiones en el archivo CHANGELOG.md.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

magical_cipher_disk-1.0.0.tar.gz (11.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

magical_cipher_disk-1.0.0-py3-none-any.whl (13.6 kB view details)

Uploaded Python 3

File details

Details for the file magical_cipher_disk-1.0.0.tar.gz.

File metadata

  • Download URL: magical_cipher_disk-1.0.0.tar.gz
  • Upload date:
  • Size: 11.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.7.19

File hashes

Hashes for magical_cipher_disk-1.0.0.tar.gz
Algorithm Hash digest
SHA256 78cc93c85b94196eaa39c33eab16c819635425ae13b2acae6e6f359b9a9b0ab2
MD5 a80e82027edb2b2d82eb3f526d6bfa20
BLAKE2b-256 316b48916c14bf9efaefcf8126d8dc839077d60fcf4c7d1d9167157d3508750e

See more details on using hashes here.

File details

Details for the file magical_cipher_disk-1.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for magical_cipher_disk-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 1142c4103521e80c964612159844709905b715f062d652719d604bff87b2e735
MD5 f329c4fd5ae89d075b31038f24ce9af6
BLAKE2b-256 4a8da69840d1d6b4710b5fd9c300aae2be6747a26ac19a0daef35929a0f09605

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page