humanhash.dev
Einprägsame Namen für Hex-Digests.
Mach aus f3527e4ef32f… ein canyon-jam-telescope-creek. Eine winzige, kostenlose REST API für SHA-1, SHA-256, MD5, UUIDs und alles andere, was sich als Hex kodieren lässt.
Ausprobieren
Mach einen GET auf einen beliebigen Hex-Digest unter /api/v1/hash/<hex>. Der Endpoint ist offen, deterministisch und CORS-fähig:
https://humanhash.dev/api/v1/hash/f3527e4ef32f9d8b59ead6b7b70a843c3da1c105Antwort:
{
"inputHash": "f3527e4ef32f9d8b59ead6b7b70a843c3da1c105",
"hash": "canyon-jam-telescope-creek"
} Funktionsweise
HumanHash bildet jeden hexadezimalen String in drei Schritten auf einen kurzen, aussprechbaren Namen ab:
- Parsen der Hex-Eingabe als Byte-Array.
- Komprimieren dieser Bytes in N gleich große Segmente (N = 4 standardmäßig) und XOR-Reduktion jedes Segments auf ein einzelnes Byte.
- Mapping jedes resultierenden Bytes (0–255) auf einen Eintrag einer kuratierten 256-Wörter-Liste, dann mit Bindestrichen verbinden.
Die Ausgabe ist vollständig deterministisch — dieselbe Eingabe ergibt immer denselben Namen — und der Algorithmus ist zustandslos, ohne Datenbank oder Zufall. Vier Wörter aus einer 256-Wörter-Liste ergeben 256⁴ ≈ 4,3 Milliarden Kombinationen, also ungefähr einen 32-Bit-Fingerabdruck: angenehm zum menschlichen Wiedererkennen einzelner Deploys oder Builds, aber kein Ersatz für den darunterliegenden Hash, wenn Kollisionsresistenz wichtig ist.
API-Referenz
GET https://humanhash.dev/api/v1/hash/{hex}
- Pfad-Parameter
-
hex— jeder hexadezimale String. Keine Längenbeschränkung; längere Eingaben werden vor dem Mapping XOR-komprimiert. - Antwort
- JSON:
{ "inputHash": string, "hash": string } - Wörter
- Immer 4 Wörter, mit Bindestrichen getrennt, aus einer festen 256-Wörter-Liste.
- Auth
- Keine. CORS offen.
- Rate Limits
- Best-Effort, keine harten Limits. Bei intensiver Nutzung selbst hosten oder vendoren.
Code-Beispiele
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
UUIDs gehen auch — entferne zuerst die Bindestriche:
curl https://humanhash.dev/api/v1/hash/550e8400e29b41d4a716446655440000
# => {"inputHash":"550e8400e29b41d4a716446655440000","hash":"vault-lift-onion-lilac"} Beispiel: GitHub Actions
Ein gängiges Pattern ist, einen einprägsamen Namen aus github.sha abzuleiten und neben dem SHA zu verwenden — etwa um ein Docker-Image mit beiden zu taggen. Genau so verwenden wir HumanHash in unseren eigenen Produktions-Pipelines:
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 }} Jeder Push bekommt zwei Tags: den exakten SHA für Reproduzierbarkeit und einen menschenfreundlichen Namen wie swift-river-mellow-bolt der tatsächlich in Chat, Dashboards und Standups brauchbar ist. Das Binary jq ist auf dem von GitHub gehosteten ubuntu-latest-Runner vorinstalliert, keine zusätzliche Einrichtung nötig.
Anwendungsfälle
- Build- und Deploy-Namen. Taggt einen CI-Build als swift-river-mellow-bolt statt 7c4f9a2. Leichter im Standup zu erwähnen, leichter im Chat-Verlauf zu finden.
- Commit-Referenzen im Chat. Ein SHA in Slack wird ignoriert; canyon-jam-telescope-creek wird gelesen.
- Session- und Request-IDs in Logs. Beim Grep über Services hinweg oder beim lauten Aussprechen einer ID im Call schlagen Wörter Hex.
- Backup- und Snapshot-Namen. vault-bronze-falcon-river wiederherstellen ist weniger beängstigend als b8f9c1d2…
- Fingerabdruck-Vergleich. SSH- oder TLS-Fingerabdrücke visuell als vier Wörter zu vergleichen ist viel schneller als 40 Hex-Zeichen.
- Asset- / Versions-Labels. Gib Build-Artefakten, Modell-Checkpoints oder Dataset-Snapshots einen Namen, über den Menschen reden können.
Vergleich mit anderen Identifier-Formaten
| Format | Beispiel | Einprägsam | Kollisionsraum |
|---|---|---|---|
| SHA-1 hex | f3527e4ef32f… | Nein | 2¹⁶⁰ |
| UUID v4 | 550e8400-e29b-41d4-a716-… | Nein | 2¹²² |
| Base58 (12 Zeichen) | 5KQwrPbwdL5M | Teilweise | ~70 Bit |
| HumanHash (4 Wörter) | canyon-jam-telescope-creek | Ja | 2³² ≈ 4,3 Mrd. |
| Petname / coolname Libs | quiet-blue-finch | Ja | Variabel |
HumanHash ist einzigartig als deterministische Projektion eines bestehenden Identifiers — es ersetzt deinen UUID oder Hash nicht, sondern schattet ihn mit einem lesbaren Namen. Verwende beide zusammen.
Häufig gestellte Fragen
Was ist HumanHash? +
Wie funktioniert der Algorithmus? +
Ist die Umwandlung umkehrbar? +
Ist es sicher für Sicherheits-Tokens oder Authentifizierung? +
Ist die API kostenlos? Gibt es Rate Limits? +
Kann ich selbst hosten oder den Algorithmus vendoren? +
Wie viele eindeutige Ausgaben gibt es? +
Wer betreibt humanhash.dev? +
Das 256-Wörter-Vokabular
Die Ausgaben kommen aus einer kuratierten Liste von 256 kurzen, aussprechbaren englischen Wörtern, gruppiert in acht thematische Kategorien zu je 32. Die Liste vermeidet mehrdeutige Schreibweisen, Beinahe-Homophone und Wörter, die aneinandergereiht schlecht zu lesen sind.
Farben (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
Tiere (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
Planeten & Weltraum (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
Natur & Geografie (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
Essen & Obst (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
Adjektive (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
Objekte & Konzepte (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
Verben & Aktionen (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
Keine Garantien
Dieser Dienst wird wie er ist bereitgestellt, ohne Verfügbarkeitsgarantien und ohne Versprechen, dass er ewig existiert. Allerdings nutzen wir ihn für unsere eigenen Produktions-Workloads, also verschwindet er auf absehbare Zeit nicht. Wenn du darauf angewiesen bist, ziehe in Betracht, den Algorithmus zu vendoren — er ist klein.
Über
HumanHash wird betrieben von Pilvia Oy, einem finnischen Cloud-Unternehmen. Wir nutzen es intern zum Labeln von Builds, Deploys und Snapshots und haben es geöffnet, weil der Algorithmus allgemein nützlich ist.
Das humanhash-Konzept entstand als kleine Python-Bibliothek von Zachary Voase. Diese Implementierung ist eine unabhängige TypeScript-Neufassung auf Cloudflare Workers mit einer eigenen Wortliste.