humanhash.dev
Muistettavat nimet hex-tiivisteille.
Muunna f3527e4ef32f… muotoon canyon-jam-telescope-creek. Pieni, ilmainen REST API SHA-1:lle, SHA-256:lle, MD5:lle, UUID:ille ja kaikelle muulle, mitä voit esittää hex-muodossa.
Kokeile
Tee GET-pyyntö osoitteeseen /api/v1/hash/<hex> millä tahansa hex-tiivisteellä. Päätepiste on avoin, deterministinen ja tukee CORS:ia:
https://humanhash.dev/api/v1/hash/f3527e4ef32f9d8b59ead6b7b70a843c3da1c105Vastaus:
{
"inputHash": "f3527e4ef32f9d8b59ead6b7b70a843c3da1c105",
"hash": "canyon-jam-telescope-creek"
} Miten se toimii
HumanHash muuntaa minkä tahansa heksadesimaalisen merkkijonon lyhyeksi, lausuttavaksi nimeksi kolmessa vaiheessa:
- Jäsennä hex-syöte tavutaulukoksi.
- Pakkaa tavut N:ään yhtä suureen segmenttiin (oletuksena N = 4) ja XOR-yhdistä kunkin segmentin tavut yhdeksi tavuksi.
- Kuvaa jokainen tulostavu (0–255) yhdeksi sanaksi 256-sanaisesta listasta ja yhdistä sanat yhdysviivoin.
Tulos on täysin deterministinen — sama syöte tuottaa aina saman nimen — ja algoritmi on tilaton, ilman tietokantaa tai satunnaisuutta. Neljä sanaa 256-sanaisesta listasta antaa 256⁴ ≈ 4,3 miljardia yhdistelmää, mikä vastaa noin 32-bittistä sormenjälkeä: riittää yksittäisten julkaisujen tai buildien tunnistamiseen, mutta ei korvaa alkuperäistä hashia silloin, kun törmäyskestävyydellä on väliä.
API-dokumentaatio
GET https://humanhash.dev/api/v1/hash/{hex}
- Polkuparametri
-
hex— mikä tahansa heksadesimaalinen merkkijono. Pituutta ei ole rajoitettu; pidemmät syötteet XOR-pakataan ennen kuvausta. - Vastaus
- JSON:
{ "inputHash": string, "hash": string } - Sanat
- Aina 4 sanaa yhdysviivoin eroteltuna kiinteästä 256-sanaisesta listasta.
- Tunnistus
- Ei vaadita. CORS on avoin.
- Käyttörajat
- Best-effort, ei kovia rajoja. Vendoroi koodi omaan projektiisi tai isännöi itse, jos käyttö on raskasta.
Koodiesimerkit
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
UUID:t toimivat myös — poista ensin yhdysviivat:
curl https://humanhash.dev/api/v1/hash/550e8400e29b41d4a716446655440000
# => {"inputHash":"550e8400e29b41d4a716446655440000","hash":"vault-lift-onion-lilac"} Esimerkki: GitHub Actions
Yleinen tapa on johtaa muistettava nimi github.sha-arvosta ja käyttää sitä SHA:n rinnalla — esimerkiksi tagittamaan Docker-imagen molemmilla. Näin käytämme HumanHashia omissa tuotantoputkissamme:
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 }} Jokainen push saa kaksi tagia: tarkan SHA:n toistettavuutta varten ja ihmisystävällisen nimen, kuten swift-river-mellow-bolt — se on aidosti käyttökelpoinen chatissä, kojelaudoissa ja palavereissa. Komento jq on esiasennettu GitHubin ubuntu-latest-runnerille, joten lisäasennuksia ei tarvita.
Käyttötapaukset
- Build- ja deploy-nimet. Tagita CI-build nimellä swift-river-mellow-bolt eikä 7c4f9a2. Helpompi viitata siihen palavereissa ja löytää chat-historiasta.
- Commit-viittaukset chatissä. Slackiin liitetty SHA jää huomaamatta; canyon-jam-telescope-creek tulee luetuksi.
- Sessio- ja request-ID:t logeissa. Kun grepit logeja useammasta palvelusta tai sanot ID:n ääneen puhelussa, sanat voittavat hex-merkkijonon.
- Varmuuskopio- ja snapshot-nimet. Nimen vault-bronze-falcon-river palauttaminen pelottaa vähemmän kuin nimen b8f9c1d2… palauttaminen.
- Sormenjälkien vertailu. SSH- tai TLS-sormenjälkien silmämääräinen vertailu on paljon nopeampaa neljänä sanana kuin 40 hex-merkkinä.
- Asset- ja versionimet. Anna build-artefakteille, mallien checkpointeille tai data-snapshoteille nimi, josta ihmiset voivat puhua.
Vertailu muihin tunnistemuotoihin
| Muoto | Esimerkki | Muistettava | Törmäysavaruus |
|---|---|---|---|
| SHA-1 hex | f3527e4ef32f… | Ei | 2¹⁶⁰ |
| UUID v4 | 550e8400-e29b-41d4-a716-… | Ei | 2¹²² |
| Base58 (12 merkkiä) | 5KQwrPbwdL5M | Osittain | ~70 bittiä |
| HumanHash (4 sanaa) | canyon-jam-telescope-creek | Kyllä | 2³² ≈ 4,3 mrd |
| Petname/coolname-kirjastot | quiet-blue-finch | Kyllä | Vaihtelee |
HumanHashin erikoisuus on, että se on deterministinen projektio olemassa olevasta tunnisteesta — se ei korvaa UUID:tä tai hashia, vaan antaa sille rinnalle nimen, jonka ihminen pystyy lukemaan. Käytä molempia yhdessä.
Usein kysytyt kysymykset
Mikä on HumanHash? +
Miten algoritmi toimii? +
Onko muunnos peruutettavissa? +
Onko turvallista käyttää tietoturva-tokeneihin tai tunnistautumiseen? +
Onko API ilmainen? Onko käyttörajoja? +
Voinko isännöidä itse tai vendoroida algoritmin? +
Kuinka monta ainutlaatuista tulosta on mahdollista? +
Kuka ylläpitää humanhash.dev:tä? +
256-sanainen sanasto
Tulokset poimitaan käsin kuratoidusta listasta, jossa on 256 lyhyttä ja helposti lausuttavaa englanninkielistä sanaa, jaettuna kahdeksaan teemaryhmään — kussakin 32 sanaa. Lista välttää epäselviä kirjoitusasuja, lähihomofoneja ja sanoja, jotka luetaan huonosti ketjutettuina.
Värit (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
Eläimet (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
Planeetat ja avaruus (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
Luonto ja maantiede (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
Ruoka ja hedelmät (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
Adjektiivit (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
Esineet ja käsitteet (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
Verbit ja toiminta (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
Ei takuita
Tätä palvelua tarjotaan sellaisena kuin se on, ilman käytettävyys- tai saatavuustakuita eikä lupausta, että se olisi olemassa ikuisesti. Käytämme sitä kuitenkin omiin tuotantotarpeisiimme, joten se ei ole katoamassa ihan lähiaikoina. Jos riippuvuus on kriittinen, harkitse algoritmin vendorointia — se on pieni.
Tietoa
HumanHashia ylläpitää Pilvia Oy, suomalainen pilviyritys. Käytämme sitä sisäisesti buildien, julkaisujen ja snapshotien merkitsemiseen, ja olemme avanneet sen, koska algoritmi on yleishyödyllinen.
Alkuperäinen humanhash-konsepti syntyi Zachary Voasen pienestä Python-kirjastosta. Tämä toteutus on itsenäinen TypeScript-uudelleenkirjoitus Cloudflare Workersilla, omalla räätälöidyllä sanastolla.