humanhash.dev
Des noms mémorisables pour vos empreintes hexadécimales.
Transformez f3527e4ef32f… en canyon-jam-telescope-creek. Une petite API REST gratuite pour SHA-1, SHA-256, MD5, UUID et tout ce qui peut s'encoder en hex.
Essayer
Faites un GET sur n'importe quelle empreinte hex à /api/v1/hash/<hex>. L'endpoint est ouvert, déterministe et CORS-friendly :
https://humanhash.dev/api/v1/hash/f3527e4ef32f9d8b59ead6b7b70a843c3da1c105Réponse :
{
"inputHash": "f3527e4ef32f9d8b59ead6b7b70a843c3da1c105",
"hash": "canyon-jam-telescope-creek"
} Fonctionnement
HumanHash transforme n'importe quelle chaîne hexadécimale en un nom court et prononçable en trois étapes :
- Parser l'entrée hex en tableau d'octets.
- Compresser ces octets en N segments égaux (N = 4 par défaut) et XOR-réduire chaque segment à un seul octet.
- Mapper chaque octet résultant (0–255) à une entrée d'une liste de 256 mots, puis joindre par tirets.
La sortie est totalement déterministe — la même entrée donne toujours le même nom — et l'algorithme est sans état, sans base de données ni aléa. Quatre mots tirés d'une liste de 256 donnent 256⁴ ≈ 4,3 milliards de combinaisons, soit environ une empreinte de 32 bits : confortable pour qu'un humain reconnaisse des déploiements ou builds individuels, mais pas un substitut au hash sous-jacent quand la résistance aux collisions compte.
Référence de l'API
GET https://humanhash.dev/api/v1/hash/{hex}
- Paramètre de chemin
-
hex— toute chaîne hexadécimale. Pas de limite de longueur ; les entrées plus longues sont XOR-compressées avant mapping. - Réponse
- JSON :
{ "inputHash": string, "hash": string } - Mots
- Toujours 4 mots séparés par des tirets, depuis une liste fixe de 256.
- Authentification
- Aucune. CORS ouvert.
- Limites
- Meilleur effort, sans limites strictes. Vendorisez ou auto-hébergez pour un usage intensif.
Exemples de code
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
Les UUID fonctionnent aussi — retirez d'abord les tirets :
curl https://humanhash.dev/api/v1/hash/550e8400e29b41d4a716446655440000
# => {"inputHash":"550e8400e29b41d4a716446655440000","hash":"vault-lift-onion-lilac"} Exemple : GitHub Actions
Un pattern courant consiste à dériver un nom mémorisable depuis github.sha et à l'utiliser à côté du SHA — par exemple pour taguer une image Docker avec les deux. C'est exactement ainsi que nous utilisons HumanHash dans nos propres pipelines de production :
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 }} Chaque push obtient deux tags : le SHA exact pour la reproductibilité, et un nom convivial comme swift-river-mellow-bolt réellement utilisable en chat, dashboards et réunions. Le binaire jq est préinstallé sur le runner ubuntu-latest hébergé par GitHub, aucune installation supplémentaire requise.
Cas d'usage
- Noms de build et de déploiement. Taguez un build CI comme swift-river-mellow-bolt plutôt que 7c4f9a2. Plus facile à mentionner en réunion, plus facile à retrouver dans l'historique de chat.
- Références de commit en chat. Coller un SHA dans Slack passe inaperçu ; coller canyon-jam-telescope-creek se lit.
- IDs de session et de requête dans les logs. Pour grep entre services ou dire un ID à voix haute en visio, les mots battent l'hex.
- Noms de sauvegardes et snapshots. Restaurer vault-bronze-falcon-river fait moins peur que restaurer b8f9c1d2…
- Comparaison d'empreintes. Comparer visuellement des empreintes SSH ou TLS est bien plus rapide en quatre mots qu'en 40 caractères hex.
- Étiquettes d'assets / versions. Donnez à vos artefacts de build, checkpoints de modèles ou snapshots de datasets un nom dont les humains peuvent parler.
Comparaison avec d'autres formats d'identifiants
| Format | Exemple | Mémorisable | Espace de collision |
|---|---|---|---|
| SHA-1 hex | f3527e4ef32f… | Non | 2¹⁶⁰ |
| UUID v4 | 550e8400-e29b-41d4-a716-… | Non | 2¹²² |
| Base58 (12 car.) | 5KQwrPbwdL5M | Un peu | ~70 bits |
| HumanHash (4 mots) | canyon-jam-telescope-creek | Oui | 2³² ≈ 4,3 Md |
| Petname / coolname | quiet-blue-finch | Oui | Variable |
HumanHash est singulier : c'est une projection déterministe d'un identifiant existant — il ne remplace pas votre UUID ou hash, il le double avec un nom lisible. Utilisez les deux ensemble.
Questions fréquentes
Qu'est-ce que HumanHash ? +
Comment fonctionne l'algorithme ? +
La conversion est-elle réversible ? +
Est-ce sûr pour des tokens ou de l'authentification ? +
L'API est-elle gratuite ? Y a-t-il des limites ? +
Puis-je auto-héberger ou vendoriser l'algorithme ? +
Combien de sorties uniques sont possibles ? +
Qui opère humanhash.dev ? +
Le vocabulaire de 256 mots
Les sorties sont tirées d'une liste curée de 256 mots anglais courts et prononçables, regroupés en huit catégories thématiques de 32. La liste évite les orthographes ambiguës, les quasi-homophones et les mots qui se lisent mal enchaînés.
Couleurs (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
Animaux (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
Planètes & espace (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
Nature & géographie (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
Nourriture & fruits (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
Adjectifs (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
Objets & concepts (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
Verbes & actions (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
Sans garantie
Ce service est fourni tel quel, sans garantie de disponibilité et sans promesse d'exister éternellement. Cela dit, nous l'utilisons pour nos propres charges de production, donc il ne va pas disparaître à court ou moyen terme. Si vous en dépendez, envisagez de vendoriser l'algorithme — il est petit.
À propos
HumanHash est opéré par Pilvia Oy, une société cloud finlandaise. Nous l'utilisons en interne pour étiqueter builds, déploiements et snapshots, et l'avons ouvert parce que l'algorithme est utile en général.
Le concept humanhash est né d'une petite bibliothèque Python par Zachary Voase. Cette implémentation est une réécriture TypeScript indépendante tournant sur Cloudflare Workers, avec un vocabulaire propre.