humanhash.dev
Nombres memorables para hashes hexadecimales.
Convierte f3527e4ef32f… en canyon-jam-telescope-creek. Una API REST diminuta y gratuita para SHA-1, SHA-256, MD5, UUID y cualquier otra cosa que puedas codificar como hexadecimal.
Pruébalo
Haz GET a cualquier hash hexadecimal en /api/v1/hash/<hex>. El endpoint es abierto, determinista y compatible con CORS:
https://humanhash.dev/api/v1/hash/f3527e4ef32f9d8b59ead6b7b70a843c3da1c105Respuesta:
{
"inputHash": "f3527e4ef32f9d8b59ead6b7b70a843c3da1c105",
"hash": "canyon-jam-telescope-creek"
} Cómo funciona
HumanHash convierte cualquier cadena hexadecimal en un nombre corto y pronunciable en tres pasos:
- Analiza la entrada hexadecimal como un arreglo de bytes.
- Comprime esos bytes en N segmentos iguales (N = 4 por defecto) y aplica XOR a los bytes de cada segmento para reducirlos a un solo byte.
- Mapea cada byte resultante (0–255) a una entrada de una lista cuidada de 256 palabras y une con guiones.
La salida es totalmente determinista — la misma entrada produce siempre el mismo nombre — y el algoritmo es sin estado, sin base de datos ni aleatoriedad. Cuatro palabras de una lista de 256 dan 256⁴ ≈ 4.300 millones de combinaciones, aproximadamente una huella de 32 bits: cómoda para que un humano reconozca despliegues o builds individuales, pero no un sustituto del hash subyacente cuando importa la resistencia a colisiones.
Referencia de la API
GET https://humanhash.dev/api/v1/hash/{hex}
- Parámetro de ruta
-
hex— cualquier cadena hexadecimal. No hay restricción de longitud; las entradas más largas se comprimen con XOR antes del mapeo. - Respuesta
- JSON:
{ "inputHash": string, "hash": string } - Palabras
- Siempre 4 palabras separadas por guiones, de una lista fija de 256.
- Autenticación
- Ninguna. CORS abierto.
- Límites
- Mejor esfuerzo, sin límites estrictos. Vendoriza o aloja por tu cuenta para uso intenso.
Ejemplos de código
curl
curl https://humanhash.dev/api/v1/hash/f3527e4ef32f9d8b59ead6b7b70a843c3da1c105 JavaScript (fetch)
const hex = "f3527e4ef32f9d8b59ead6b7b70a843c3da1c105";
const res = await fetch(`https://humanhash.dev/api/v1/hash/${hex}`);
const { hash } = await res.json();
console.log(hash); // "canyon-jam-telescope-creek" Python
import requests
hex_digest = "f3527e4ef32f9d8b59ead6b7b70a843c3da1c105"
r = requests.get(f"https://humanhash.dev/api/v1/hash/{hex_digest}")
print(r.json()["hash"]) # "canyon-jam-telescope-creek" Go
resp, _ := http.Get("https://humanhash.dev/api/v1/hash/f3527e4ef32f9d8b59ead6b7b70a843c3da1c105")
defer resp.Body.Close()
var out struct{ InputHash, Hash string }
json.NewDecoder(resp.Body).Decode(&out)
fmt.Println(out.Hash) // "canyon-jam-telescope-creek" UUID
Los UUID también funcionan — quita primero los guiones:
curl https://humanhash.dev/api/v1/hash/550e8400e29b41d4a716446655440000
# => {"inputHash":"550e8400e29b41d4a716446655440000","hash":"vault-lift-onion-lilac"} Ejemplo: GitHub Actions
Un patrón común es derivar un nombre memorable a partir de github.sha y usarlo junto al SHA — por ejemplo, para etiquetar una imagen Docker con ambos. Así es exactamente como usamos HumanHash en nuestros propios pipelines de producción:
name: build
on:
push:
branches: ["main"]
env:
IMAGE_NAME: "ghcr.io/your-org/your-app"
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Get human hash
run: echo "HUMAN_HASH=$(curl -s "https://humanhash.dev/api/v1/hash/${{ github.sha }}" | jq -r '.hash')" >> "$GITHUB_ENV"
- name: Build Docker image
run: docker build . --tag ${{ env.IMAGE_NAME }}:${{ github.sha }} --tag ${{ env.IMAGE_NAME }}:${{ env.HUMAN_HASH }}
- name: Log in to registry
run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin
- name: Push image
run: docker push --all-tags ${{ env.IMAGE_NAME }} Cada push obtiene dos etiquetas: el SHA exacto para reproducibilidad, y un nombre humano como swift-river-mellow-bolt realmente útil en chat, dashboards y reuniones. El binario jq viene preinstalado en el runner ubuntu-latest de GitHub, así que no hace falta configuración adicional.
Casos de uso
- Nombres de build y despliegue. Etiqueta un build de CI como swift-river-mellow-bolt en vez de 7c4f9a2. Más fácil de mencionar en reuniones y de encontrar en el historial de chat.
- Referencias a commits en chat. Pegar un SHA en Slack se ignora; pegar canyon-jam-telescope-creek se lee.
- IDs de sesión y request en logs. Cuando haces grep entre servicios o dices un ID en voz alta en una llamada, las palabras ganan al hex.
- Nombres de backups y snapshots. Restaurar vault-bronze-falcon-river asusta menos que restaurar b8f9c1d2…
- Comparación de huellas. Comparar huellas SSH o TLS visualmente es mucho más rápido como cuatro palabras que como 40 caracteres hex.
- Etiquetas de assets y versiones. Dale a tus artefactos de build, checkpoints de modelos o snapshots de datasets un nombre del que las personas puedan hablar.
Comparación con otros formatos de identificador
| Formato | Ejemplo | Memorable | Espacio de colisión |
|---|---|---|---|
| SHA-1 hex | f3527e4ef32f… | No | 2¹⁶⁰ |
| UUID v4 | 550e8400-e29b-41d4-a716-… | No | 2¹²² |
| Base58 (12 chars) | 5KQwrPbwdL5M | Algo | ~70 bits |
| HumanHash (4 palabras) | canyon-jam-telescope-creek | Sí | 2³² ≈ 4.300 M |
| Bibliotecas petname / coolname | quiet-blue-finch | Sí | Varía |
HumanHash es único por ser una proyección determinista de un identificador existente — no reemplaza tu UUID o hash, lo acompaña con un nombre que los humanos pueden leer. Úsalos juntos.
Preguntas frecuentes
¿Qué es HumanHash? +
¿Cómo funciona el algoritmo? +
¿Es reversible la conversión? +
¿Es seguro usarlo para tokens o autenticación? +
¿La API es gratis? ¿Hay límites de uso? +
¿Puedo auto-alojar o vendorizar el algoritmo? +
¿Cuántas salidas únicas son posibles? +
¿Quién opera humanhash.dev? +
El vocabulario de 256 palabras
Las salidas se extraen de una lista cuidada de 256 palabras inglesas cortas y pronunciables, agrupadas en ocho categorías temáticas de 32. La lista evita ortografías ambiguas, casi-homófonas y palabras que se leen mal encadenadas.
Colores (32)
aqua, azure, beige, bronze, brown, cherry, coral, cream, cyan, gold, grey, hazel, indigo, ivory, jade, khaki, lemon, lilac, lime, magenta, maroon, mauve, olive, peach, pink, plum, ruby, sage, sand, teal, violet, white
Animales (32)
alpaca, badger, beaver, bison, cobra, crane, deer, dingo, eagle, falcon, ferret, fox, geese, heron, jaguar, koala, kookaburra, lemur, lynx, moth, otter, panda, pelican, quail, raven, shark, sloth, swan, tiger, trout, vulture, zebra
Planetas y espacio (32)
asteroid, comet, cosmos, crater, eclipse, galaxy, halo, jupiter, mars, mercury, meteor, nebula, neptune, orbit, planet, quasar, rocket, satellite, saturn, sky, solar, space, star, sun, telescope, terra, titan, universe, uranus, venus, vortex, zenith
Naturaleza y geografía (32)
bluff, cairn, canyon, coast, creek, desert, dune, forest, glacier, grove, hill, horizon, island, jungle, knoll, lake, meadow, moss, ocean, peak, puddle, ridge, river, stream, swamp, thistle, trail, valley, volcano, wave, woods, yarrow
Comida y fruta (32)
apple, berry, bread, cake, clove, cookie, dough, grape, herb, honey, jam, juice, kiwi, maize, melon, mint, muffin, noodle, oats, onion, pesto, pickle, pie, rind, roast, spice, sugar, toast, vanilla, waffle, yeast, zest
Adjetivos (32)
agile, brave, calm, clever, crisp, daring, deep, easy, fierce, flat, giant, great, happy, heavy, high, light, lively, loud, lucky, mellow, quick, quiet, rapid, ready, sharp, silent, smart, smooth, solid, swift, vast, vivid
Objetos y conceptos (32)
anchor, beacon, bolt, bridge, canvas, cipher, clock, coin, crown, diamond, echo, flare, ghost, glyph, hammer, helix, jewel, key, ledger, locket, maze, moment, needle, puzzle, quill, scroll, shield, signal, spirit, token, tower, vault
Verbos y acción (32)
bounce, capture, dash, drift, enter, escape, fly, glide, grasp, halt, jump, launch, lift, march, move, pedal, plunge, quiver, race, roam, scan, seek, shine, soar, spin, spring, steer, stride, thrust, touch, travel, weave
Sin garantías
Este servicio se ofrece tal cual, sin garantías de disponibilidad ni promesa de existir para siempre. Dicho esto, lo usamos para nuestras propias cargas de producción, así que no va a desaparecer en el futuro previsible. Si dependes de él, considera vendorizar el algoritmo — es pequeño.
Acerca de
HumanHash es operado por Pilvia Oy, una empresa de nube finlandesa. Lo usamos internamente para etiquetar builds, despliegues y snapshots, y lo hemos abierto porque el algoritmo es útil en general.
El concepto de humanhash se originó como una pequeña biblioteca de Python de Zachary Voase. Esta implementación es una reescritura TypeScript independiente que corre en Cloudflare Workers, con un vocabulario propio.