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

Antwort:

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

Funktionsweise

HumanHash bildet jeden hexadezimalen String in drei Schritten auf einen kurzen, aussprechbaren Namen ab:

  1. Parsen der Hex-Eingabe als Byte-Array.
  2. Komprimieren dieser Bytes in N gleich große Segmente (N = 4 standardmäßig) und XOR-Reduktion jedes Segments auf ein einzelnes Byte.
  3. 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

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? +
HumanHash ist eine kostenlose REST API, die hexadezimale Digests — wie SHA-1, SHA-256, MD5 oder UUIDs — in kurze, einprägsame Vier-Wort-Namen wie canyon-jam-telescope-creek umwandelt. Dieselbe Eingabe erzeugt immer dieselbe Ausgabe, sodass du die Wörter überall verwenden kannst, wo du sonst einen Hash einfügen würdest, den Menschen lesen, vergleichen oder aussprechen müssen.
Wie funktioniert der Algorithmus? +
Die Hex-Eingabe wird in Bytes geparst, diese Bytes werden in N gleich große Segmente geteilt (N = 4 standardmäßig), jedes Segment wird per XOR auf ein einzelnes Byte komprimiert, und jedes resultierende Byte (0–255) wählt ein Wort aus einer festen 256-Wörter-Liste. Das Mapping ist deterministisch und zustandslos — kein Datenbank-Lookup, kein Zufall.
Ist die Umwandlung umkehrbar? +
Nein. HumanHash ist per Design einseitig und verlustbehaftet. Die Vier-Wort-Ausgabe repräsentiert unabhängig von der Eingabelänge etwa 32 Bit (rund 4,3 Milliarden Kombinationen), sodass mehrere unterschiedliche Hashes auf denselben Namen kollidieren können. Behandle die Wörter als Fingerabdruck, nicht als Identifier, aus dem du den ursprünglichen Digest zurückgewinnen kannst.
Ist es sicher für Sicherheits-Tokens oder Authentifizierung? +
Nein. Mit nur ~4,3 Milliarden möglichen Ausgaben sind HumanHash-Namen trivial brute-force-bar und waren nie für Sicherheit gedacht. Verwende sie als menschenfreundliche Labels neben einem echten Identifier, nicht als Ersatz.
Ist die API kostenlos? Gibt es Rate Limits? +
Ja, die API ist kostenlos und CORS ist offen. Aktuell keine harten Rate Limits, aber bitte sei vernünftig — der Dienst wird auf Best-Effort-Basis bereitgestellt. Bei nennenswertem Traffic vendor den Algorithmus in deinen eigenen Code (es sind ein paar Dutzend Zeilen) oder host ihn selbst.
Kann ich selbst hosten oder den Algorithmus vendoren? +
Ja. Das ursprüngliche humanhash-Konzept ist eine kleine Public-Domain-Python-Bibliothek von Zachary Voase. Die TypeScript-Implementierung hinter humanhash.dev ist absichtlich winzig und leicht in dein eigenes Projekt zu kopieren. Du brauchst nur die Wortliste (256 Strings) und eine kurze Komprimier-und-Map-Funktion.
Wie viele eindeutige Ausgaben gibt es? +
Mit den vier Standardwörtern aus einer 256-Wörter-Liste gibt es 256⁴ = 4.294.967.296 mögliche Namen — entspricht einem 32-Bit-Raum. Erhöhe die Wortanzahl, falls du mehr brauchst.
Wer betreibt humanhash.dev? +
Es wird von Pilvia Oy betrieben. Wir nutzen es für unsere eigenen Produktions-Tools — Build-Namen, Deploy-IDs, interne Logs — deshalb ist es öffentlich verfügbar. Es läuft auf Cloudflare Workers.

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.