# Generador de claves

Herramienta criptográficamente segura para generar contraseñas alfanuméricas y tokens hexadecimales, con métricas de entropía en tiempo real.

## 📋 Descripción

Aplicación web que genera claves seguras utilizando la Web Crypto API, garantizando aleatoriedad sin sesgo mediante muestreo por rechazo. Ofrece dos modos de generación: contraseñas personalizables y tokens hexadecimales, ideales para claves API, tokens de sesión o cualquier uso que requiera alta entropía.

## ✨ Características principales

### 🔑 Modo Contraseña
- **Longitud ajustable**: 8 a 100 caracteres
- **Conjuntos de caracteres**: Mayúsculas, minúsculas, números, símbolos
- **Exclusión de caracteres ambiguos**: Elimina 0, O, I, l, 1
- **Garantía de diversidad**: Asegura al menos un carácter de cada tipo seleccionado
- **Métrica de fortaleza**: Barra visual y entropía en bits (128 bits = muy fuerte)

### 🔢 Modo Hexadecimal / Token
- **Longitud ajustable**: 4 a 128 caracteres (múltiplos de 2)
- **Formato**: Minúsculas (a-f) o MAYÚSCULAS (A-F)
- **Visualización de bytes**: Muestra bytes generados y entropía real
- **Ideal para**: Claves API, tokens OAuth, números aleatorios criptográficos

### ♿ Accesibilidad integrada (UDL)
- **Modo claro/oscuro**: Alternancia con persistencia
- **Espaciado ampliado**: Facilita la lectura para personas con dislexia
- **Modos de contraste**: Normal / Alto / Blanco y negro
- **Modo foco**: Resalta cuadros de texto y reduce distracciones
- **Reset total**: Restablece todas las configuraciones

### 📊 Seguridad y transparencia
- **Aleatoriedad segura**: Web Crypto API con muestreo por rechazo
- **Entropía calculada**: Basada en tamaño del pool y longitud
- **Sin servidor**: Todo el procesamiento es local
- **Sin sesgo**: Distribución uniforme garantizada

## 🛠️ Tecnologías utilizadas

- HTML5 / CSS3
- JavaScript (ES6+)
- Web Crypto API (`crypto.getRandomValues`)
- LocalStorage para persistencia de preferencias

## 📦 Estructura del proyecto

generador-de-claves/
├── generador-de-claves.html # Aplicación principal
├── README.md # Este archivo
└── LICENSE # Licencia EUPL


## 🚀 Uso

### Modo Contraseña
1. Selecciona **"Contraseña Alfanumérica"**
2. Ajusta la longitud (8-100 caracteres)
3. Elige los tipos de caracteres a incluir
4. Opcional: activa "Evitar ambiguos" para excluir caracteres confusos
5. Pulsa **"Generar"** o usa **"Copiar"** para guardar la contraseña
6. Visualiza la fortaleza y entropía en la barra de seguridad

### Modo Hexadecimal
1. Selecciona **"Hexadecimal / Token"**
2. Ajusta la longitud (múltiplos de 2, 4-128 caracteres)
3. Elige el formato (minúsculas o mayúsculas)
4. Visualiza los bytes generados y entropía
5. Copia el token generado

## 📊 Entropía recomendada

| Uso | Bits recomendados | Caracteres hex | Longitud contraseña |
|-----|------------------|----------------|---------------------|
| Baja seguridad | 64 bits | 16 | 10-12 |
| Media seguridad | 80-112 bits | 20-28 | 14-18 |
| Alta seguridad | 128 bits | 32 | 20-24 |
| Máxima seguridad | 256 bits | 64 | 32+ |

## ⚠️ Notas importantes

- **No se almacenan contraseñas**: Todo el procesamiento es en memoria local
- **Copiar al portapapeles**: Usa los botones 📋 para copiar de forma segura
- **Visibilidad**: El botón 👁️ alterna entre mostrar/ocultar la clave
- **Caracteres ambiguos**: Al activar "Evitar ambiguos", se excluyen 0, O, I, l, 1
- **Garantía de tipos**: Si no se incluye algún tipo, la contraseña solo usará los seleccionados

## 🔒 Seguridad

Este generador utiliza:
- **Web Crypto API**: Fuente de aleatoriedad criptográficamente segura
- **Muestreo por rechazo**: Distribución uniforme sin sesgo
- **Entropía real**: Cálculo basado en tamaño del pool y longitud
- **Sin transmisión**: Los datos nunca abandonan tu dispositivo

## 📄 Licencia

Este proyecto se distribuye bajo la **European Union Public License (EUPL) v1.2**.

Copyright © 2026 Jorge Nieto Ortiz

Consulta el texto completo de la licencia en: [https://joinup.ec.europa.eu/collection/eupl](https://joinup.ec.europa.eu/collection/eupl)

## 🔧 Requisitos del sistema

- Navegador con soporte para:
  - Web Crypto API (`crypto.getRandomValues`)
  - localStorage
  - ES6+

## 👨‍💻 Autor

**Jorge Nieto Ortiz**

---

*Generador de claves criptográficamente seguras con enfoque en accesibilidad y usabilidad universal.*
