Skip to content

CreativityTech-co/Crypto

Repository files navigation

🔐 Cryto - Secure MD5 Crypto API

API intermediaria segura para generar hashes MD5 para n8n

License: MIT Node.js Express.js Security: Enhanced

📋 Descripción

Cryto es una API REST altamente segura construida con Express.js que proporciona endpoints para generar hashes criptográficos MD5. Está diseñada específicamente como intermediaria para ser integrada con n8n (plataforma de automatización de flujos de trabajo), pero puede ser utilizada por cualquier cliente REST.

La API incluye características avanzadas de seguridad como autenticación por API key, rate limiting, validación robusta de parámetros, headers de seguridad (Helmet), CORS restrictivo, logging de seguridad y un endpoint keep-alive para mantener el servicio activo en plataformas como Render.

🚀 Características

🔒 Seguridad Avanzada

  • 🔑 Autenticación API Key - Protección completa contra acceso no autorizado
  • 🛡️ Rate Limiting - Protección contra ataques DDoS y fuerza bruta
  • 🔍 Validación de Entrada - Sanitización y validación completa de parámetros
  • 🔐 Headers de Seguridad - Helmet.js con CSP, HSTS, y más
  • 🌐 CORS Restrictivo - Control granular de orígenes permitidos
  • 📊 Logging de Seguridad - Monitoreo y alertas de actividad sospechosa

⚙️ Funcionalidad

  • ✅ Generación de hashes MD5 mediante dos métodos (GET y POST)
  • ✅ Endpoint keep-alive para evitar que el servicio se duerma
  • ✅ Health check endpoint con información de seguridad
  • ✅ Manejo de errores con respuestas JSON consistentes
  • ✅ Timestamps y request IDs en todas las respuestas
  • ✅ Soporte para múltiples entornos (desarrollo/producción)

📦 Requisitos

  • Node.js >= 18.0.0
  • npm o yarn
  • Clave API segura (para producción)

🔧 Instalación y Configuración

1. Instalación

git clone https://github.com/CreativityTech-co/Cryto.git
cd Cryto
npm install

2. Configuración de Seguridad

# Copia el archivo de configuración
npm run setup

# Edita tu archivo .env
nano .env

3. Variables de Entorno Críticas

# .env (REQUERIDO)
API_KEY=tu-clave-api-super-segura-aqui           # ⚠️ OBLIGATORIO
ALLOWED_ORIGINS=https://tu-dominio.com           # Orígenes permitidos
NODE_ENV=production                              # Entorno de ejecución
ENABLE_REQUEST_LOGGING=false                     # Logging (false en prod)

# Configuración opcional
PORT=3000
RATE_LIMIT_WINDOW_MS=900000                      # 15 minutos
RATE_LIMIT_MAX_REQUESTS=100                      # Max requests por IP

4. Generar Clave API Segura

# Método recomendado - OpenSSL
openssl rand -base64 32

# Método alternativo - Node.js
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"

🚀 Uso

Iniciar el servidor

Modo producción:

npm start

Modo desarrollo (con auto-reinicio):

npm run dev

El servidor estará disponible en http://localhost:3000

📡 API Endpoints

1. Health Check

GET /

Verifica el estado de la API y lista los endpoints disponibles.

Respuesta:

{
	"status": "ok",
	"message": "Crypto API running",
	"uptime": 125.43,
	"endpoints": {
		"/hash/md5": "Generate MD5 hash (GET with query params)",
		"/hash/md5/post": "Generate MD5 hash (POST with body)",
		"/keepalive": "Keep service alive"
	}
}

2. Generar Hash MD5 (GET)

GET /hash/md5

Genera un hash MD5 concatenando token y accesskey.

Parámetros de consulta:

Parámetro Tipo Requerido Descripción
token string Token a hashear
accesskey string Clave de acceso a concatenar

Ejemplo de solicitud:

curl "http://localhost:3000/hash/md5?token=mytoken&accesskey=mykey"

Respuesta exitosa (200):

{
	"success": true,
	"hash": "5d41402abc4b2a76b9719d911017c592",
	"timestamp": "2026-01-15T16:30:45.123Z"
}

Respuesta con error (400):

{
	"success": false,
	"error": "Missing required query param: token"
}

3. Generar Hash MD5 (POST)

POST /hash/md5/post

Alternativa POST para generar hashes MD5. Útil para cadenas largas o datos sensibles.

Body (JSON):

{
	"token": "mytoken",
	"accesskey": "mykey"
}

Ejemplo de solicitud:

curl -X POST http://localhost:3000/hash/md5/post \
  -H "Content-Type: application/json" \
  -d '{
    "token": "mytoken",
    "accesskey": "mykey"
  }'

Respuesta exitosa (200):

{
	"success": true,
	"hash": "5d41402abc4b2a76b9719d911017c592",
	"timestamp": "2026-01-15T16:30:45.123Z"
}

Respuesta con error (400):

{
	"success": false,
	"error": "Missing required fields: token and accesskey"
}

4. Keep-Alive

GET /keepalive

Endpoint para mantener el servicio activo. Útil cuando se despliega en plataformas que ponen en sleep servicios inactivos (ej: Render).

Respuesta:

{
	"status": "alive",
	"uptime": 245.67,
	"lastRequest": "2026-01-15T16:35:22.456Z"
}

🔌 Integración con n8n

Para integrar Cryto con n8n, utiliza el nodo HTTP Request:

  1. Método: GET o POST (según prefieras)
  2. URL: http://tu-dominio:puerto/hash/md5 o /hash/md5/post
  3. Parámetros:
    • token: El valor a hashear
    • accesskey: La clave de acceso
  4. Headers (POST): Content-Type: application/json
  5. Ejemplo en n8n (GET):

{
	{
		$request(
			'http://localhost:3000/hash/md5?token=' +
				encodeURIComponent(token) +
				'&accesskey=' +
				encodeURIComponent(accesskey),
		).json();
	}
}

📦 Dependencias

{
	"express": "^4.18.2", // Framework web
	"crypto-js": "^4.2.0", // Librería de criptografía
	"cors": "^2.8.5" // CORS middleware
}

Dependencias de desarrollo:

{
	"nodemon": "^3.0.2" // Auto-reinicio durante desarrollo
}

🛠️ Scripts

npm start      # Inicia el servidor en modo producción
npm run dev    # Inicia el servidor con nodemon para desarrollo

📝 Estructura del Proyecto

Cryto/
├── server.js              # Archivo principal de la aplicación
├── package.json           # Configuración del proyecto
├── package-lock.json      # Lock file de dependencias
├── .gitignore            # Archivos a ignorar en git
└── README.md             # Este archivo

🌍 Despliegue

Render.com

  1. Conecta tu repositorio GitHub a Render
  2. Crea un nuevo Web Service
  3. Configura:
    • Build Command: npm install
    • Start Command: npm start
    • Environment: Node
  4. Añade un cron job para el keep-alive:
    */10 * * * * curl https://tu-servicio.onrender.com/keepalive
    

Docker

FROM node:18-alpine

WORKDIR /app

COPY package*.json ./
RUN npm ci --only=production

COPY server.js .

EXPOSE 3000

CMD ["npm", "start"]

🔒 Seguridad

⚠️ Nota importante: MD5 no es criptográficamente seguro para nuevas aplicaciones. Se recomienda:

  • Usar MD5 solo cuando es requerido por sistemas legados o integraciones específicas
    • Nunca usar MD5 para almacenar contraseñas
    • Para nuevas aplicaciones, considera usar SHA-256 o SHA-512

🐛 Logs y Debugging

El servidor registra información útil en consola:

  • [2026-01-15T16:30:45.123Z] Hash request - Token length: 10, AccessKey: myke...
    

Para desactivar logs en producción, comenta la línea console.log() en server.js.

📄 Licencia

Este proyecto está bajo licencia MIT. Ver archivo LICENSE para más detalles.

👨‍💻 Autor

CREATIVITY TECH - GitHub

🤝 Contribuciones

Las contribuciones son bienvenidas. Por favor:

  1. Fork el proyecto
  2. Crea una rama para tu feature (git checkout -b feature/AmazingFeature)
  3. Commit tus cambios (git commit -m 'Add some AmazingFeature')
  4. Push a la rama (git push origin feature/AmazingFeature)
  5. Abre un Pull Request

📞 Soporte

Si encuentras problemas o tienes sugerencias, abre un issue en el repositorio.

🔄 Changelog

v1.0.0 (2026-01-15)

  • ✨ Lanzamiento inicial
  • ✨ Endpoints GET y POST para generación de hashes MD5
  • ✨ Endpoint keep-alive para mantener servicio activo
  • ✨ Health check endpoint
  • ✨ CORS habilitado
  • ✨ Validación robusta de parámetros

Creado con ❤️ por CREATIVITY TECH

About

Resources

Security policy

Stars

Watchers

Forks

Packages

 
 
 

Contributors