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/f3527e4ef32f9d8b59ead6b7b70a843c3da1c105

Respuesta:

{
  "inputHash": "f3527e4ef32f9d8b59ead6b7b70a843c3da1c105",
  "hash": "canyon-jam-telescope-creek"
}

Cómo funciona

HumanHash convierte cualquier cadena hexadecimal en un nombre corto y pronunciable en tres pasos:

  1. Analiza la entrada hexadecimal como un arreglo de bytes.
  2. 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.
  3. 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

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 2³² ≈ 4.300 M
Bibliotecas petname / coolname quiet-blue-finch 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? +
HumanHash es una API REST gratuita que convierte hashes hexadecimales — como SHA-1, SHA-256, MD5 o UUID — en nombres cortos y memorables de cuatro palabras como canyon-jam-telescope-creek. La misma entrada siempre produce la misma salida, así que puedes usar las palabras en cualquier lugar donde normalmente pegarías un hash que las personas necesitan leer, comparar o decir en voz alta.
¿Cómo funciona el algoritmo? +
La entrada hexadecimal se descompone en bytes, esos bytes se dividen en N segmentos iguales (N = 4 por defecto), cada segmento se comprime con XOR a un solo byte, y cada byte resultante (0–255) selecciona una palabra de una lista fija de 256. El mapeo es determinista y sin estado — sin consultas a base de datos ni aleatoriedad.
¿Es reversible la conversión? +
No. HumanHash es unidireccional y con pérdida por diseño. La salida de cuatro palabras representa unos 32 bits (unos 4.300 millones de combinaciones) sin importar la longitud original, así que varios hashes distintos pueden colisionar al mismo nombre. Trata las palabras como una huella, no como un identificador del que puedas recuperar el hash original.
¿Es seguro usarlo para tokens o autenticación? +
No. Con solo ~4.300 millones de salidas posibles, los nombres de HumanHash son triviales de fuerza bruta y nunca fueron diseñados para seguridad. Úsalos como etiquetas legibles junto a un identificador real, no como reemplazo.
¿La API es gratis? ¿Hay límites de uso? +
Sí, la API es gratis y CORS está abierto. No hay límites estrictos por ahora, pero sé razonable — el servicio se ofrece tal cual, mejor esfuerzo. Si esperas tráfico significativo, vendoriza el algoritmo en tu propio código (son unas pocas docenas de líneas) o aloja por tu cuenta.
¿Puedo auto-alojar o vendorizar el algoritmo? +
Sí. El concepto original de humanhash es una pequeña biblioteca de dominio público en Python de Zachary Voase. La implementación TypeScript detrás de humanhash.dev es intencionalmente pequeña y fácil de copiar a tu proyecto. Solo necesitas la lista de palabras (256 cadenas) y una función corta de comprimir-y-mapear.
¿Cuántas salidas únicas son posibles? +
Con las cuatro palabras por defecto de una lista de 256, hay 256⁴ = 4.294.967.296 nombres posibles — equivalente a un espacio de 32 bits. Aumenta el número de palabras si necesitas más.
¿Quién opera humanhash.dev? +
Lo opera Pilvia Oy. Lo usamos para nuestras propias herramientas de producción — nombres de builds, IDs de despliegue, logs internos — por eso está disponible públicamente. Corre en Cloudflare Workers.

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.