Repositorio de programación funcional en python, con un reto practico alineado a ciberseguridad y bigdata
Este proyecto implementa diferentes métodos de cifrado y hashing en Python utilizando programación funcional. Incluye 5 algoritmos diferentes que procesan mensajes de texto.
¿Alguna vez has pensado en cómo los especialistas en seguridad buscan contraseñas o mensajes cifrados? En este reto, tú serás el hacker.
Se te darán mensajes cifrados (en formato Base64), pero aquí viene lo interesante: sabes exactamente cómo fueron cifrados. Tu misión es encontrar el mensaje original de 4 caracteres (números y letras minúsculas) usando fuerza bruta.
Cada mensaje pasó por esta cadena de transformación (en este orden):
- Cifrado César (desplazamiento de 3) - Mueve cada letra 3 posiciones en el alfabeto
- Cifrado ROT13 - Rota cada letra 13 posiciones
- Hash SHA256 - Convierte el resultado en una huella digital (64 caracteres)
- Hash MD5 - Convierte nuevamente en otra huella digital (32 caracteres)
- Codificación Base64 - Convierte en texto seguro para transportar
Aquí tienes 4 mensajes cifrados. Tu reto es encontrar los originales:
| Mensaje Cifrado (Base64) | Pista |
|---|---|
MTAyMGY5OGQ5OTdhYTdjZDRmODI1NGU2N2ZlODM2MmI= |
Comienza con una letra del inicio del alfabeto |
MDY5ZGFmNDQ0ZmZjOTZjNmQzN2E3YmY1Nzc4NDY4MTg= |
Una palabra común en programación |
ZmRjOTFkMzVlNzFiZGMxODQxMWM2Y2QzODkwNjNhNzI= |
Último recurso de un programador desesperado |
MGM0Mjk5ZThkOGYwMjFhNDIwZDkyNmJiYWFlZjY3ZWE= |
Lo opuesto a producción |
Para 4 caracteres con números (0-9) y letras minúsculas (a-z):
Total de combinaciones = 36^4 = 1,679,616 posibilidades
Parece mucho, ¿verdad? Pero no lo es tanto:
- En una computadora moderna: ~15-30 segundos
- Optimizado y paralelizado: ~1-5 segundos
- En tu celular: ~60-120 segundos
No necesitas resolver esto solo. Puedes unirte con otros para dividir el trabajo:
Ejemplo: Si se unen 10 personas:
- Persona 1: Busca mensajes que empiezan con letras a-c (a000...czz9)
- Persona 2: Busca mensajes que empiezan con letras d-f (d000...fzz9)
- Persona 3: Busca mensajes que empiezan con letras g-i (g000...izz9)
- ... y así sucesivamente
Cada persona solo tendría que revisar ~168,000 combinaciones en lugar de 1.6 millones. ¡10 veces más rápido!
O más simple aún:
- Persona A: Busca con todos los números al final (ab00, ab01, ab02... ab99)
- Persona B: Busca con todo tipo de combinaciones desde su punto asignado
- Y así compartes el esfuerzo
- Escribe un programa en Python que pruebe combinaciones automáticamente
- Optimiza tu código: Evita crear objetos innecesarios en el bucle
- Usa paralelismo: Python permite procesar múltiples candidatos en paralelo
- Divide con un equipo: Acuerda quién busca en qué rango
- Documenta tu proceso: Muestra cómo lo encontraste
Tu código debería:
Para cada candidato posible de 4 caracteres:
1. Aplicar Caesar cipher (shift=3)
2. Aplicar ROT13
3. Aplicar SHA256
4. Aplicar MD5
5. Aplicar Base64
6. Comparar con el resultado objetivo
Si coincide → ¡Lo encontraste!
- Python 3.11
- uv (gestor de paquetes)
- Instalar uv (si no está instalado):
pip install uv- El proyecto ya está configurado con uv, por lo que las dependencias se instalarán automáticamente al ejecutar los comandos.
.
├── main.py # Archivo principal que orquesta todas las funciones
├── utils/ # Carpeta con funciones de cifrado/hashing
│ ├── md5_hash.py # Función de hash MD5
│ ├── sha256_hash.py # Función de hash SHA256
│ ├── base64_encode.py # Función de codificación Base64
│ ├── caesar_cipher.py # Función de cifrado Caesar
│ └── rot13_cipher.py # Función de cifrado ROT13
├── tests/ # Pruebas unitarias
│ ├── test_md5_hash.py
│ ├── test_sha256_hash.py
│ ├── test_base64_encode.py
│ ├── test_caesar_cipher.py
│ └── test_rot13_cipher.py
└── README.md # Este archivo
uv run python main.pyEste demostrará todas las transformaciones con un mensaje de ejemplo.
uv run pytestuv run pytest -vPuedes importar las funciones directamente:
from utils import caesar_cipher, rot13_cipher, md5_hash, sha256_hash, base64_encode
# Aplicar todas las transformaciones a un mensaje
mensaje = "ab12"
cifrado1 = caesar_cipher(mensaje, shift=3)
cifrado2 = rot13_cipher(cifrado1)
hash1 = sha256_hash(cifrado2)
hash2 = md5_hash(hash1)
resultado_final = base64_encode(hash2)
print(resultado_final) # Resultado en Base64Cada función está completamente documentada y lista para usar:
- Qué hace: Desplaza cada letra del alfabeto una cantidad fija de posiciones
- Este proyecto: Usa desplazamiento de 3
- Ejemplo: "abc" → "def"
- ¿Se puede revertir?: Sí, es reversible
- Qué hace: Especial tipo de Caesar que rota 13 posiciones exactas
- Ejemplo: "abc" → "nop"
- ¿Se puede revertir?: Sí, es totalmente reversible (ROT13 dos veces = original)
- Qué hace: Convierte cualquier texto en una "huella digital" de 64 caracteres
- Ejemplo: "test" →
75f9e16ad373a52a4cca45022d192f6f9d719a34847e8c9d11c897e3aafd8dad - ¿Se puede revertir?: NO, es irreversible
- Uso: Proteger contraseñas
- Qué hace: Similar a SHA256, crea una huella digital de 32 caracteres
- ¿Se puede revertir?: NO, es irreversible
- Nota: MD5 es más antigua, pero sirve para este ejercicio
- Qué hace: Convierte datos binarios en texto legible y seguro
- Ejemplo: "test" →
dGVzdA== - ¿Se puede revertir?: Sí, es completamente reversible
- Uso: Transportar datos por internet sin problemas
Cuando ejecutas uv run python main.py, verás esto:
================================================================================
DEMOSTRACIÓN DE CIFRADO Y HASHING
================================================================================
Mensaje original: Hello, World! This is a test message for encryption.
--------------------------------------------------------------------------------
1. MD5 Hash:
9cf1b30cbcc693e8df71483bdb7e72a6
2. SHA256 Hash:
73a157f66c7a2c0df98badcc482b92be50b1fee8f82122cc8873f1d1758651f1
3. Codificación Base64:
SGVsbG8sIFdvcmxkISBUaGlzIGlzIGEgdGVzdCBtZXNzYWdlIGZvciBlbmNyeXB0aW9uLg==
4. Cifrado César (desplazamiento=3):
Khoor, Zruog! Wklv lv d whvw phvvdjh iru hqfubswlrq.
5. Cifrado ROT13:
Uryyb, Jbeyq! Guvf vf n grfg zrffntr sbe rapelcgvba.
================================================================================
¡Todos los métodos de cifrado y hashing completados exitosamente!
================================================================================
El proyecto incluye 35 pruebas unitarias que cubren todos los algoritmos implementados:
- 6 tests para MD5
- 6 tests para SHA256
- 6 tests para Base64
- 6 tests para Caesar Cipher
- 6 tests para ROT13 Cipher
Estas pruebas garantizan que todas las funciones funcionen correctamente.
- Este proyecto es educativo y demuestra los conceptos básicos de criptografía
- Los algoritmos aquí son conocidos públicamente, no inventes uno propio para seguridad real
- Para seguridad real, siempre usa librerías criptográficas confiables