Skip to main content

Pink Hash

It's like a pink elephant, but a hash

Convert hashes to mnemonic phrases.

Hashes are great for many machine-specific purposes, but if you give a hash to a person (e.g., display it on a console), you're doing something wrong. Humans struggle with remembering, comparing, or typing hashes accurately. For most people, 8f776debaf8b5031643aa463ba5bf0dc and 8f776debaf8b5013643aa463ba5bf0dc look essentially the same.

However, humans aren’t entirely useless — they can remember vivid phrases quite well. If you tell someone not to think about a pink elephant (or a white monkey), and then Margot Robbie calls to ask them out on a date, even after spending the entire evening and night with her, they’ll still be thinking about the pink elephant.

If a hash is converted into words, people will remember it much better:

  • alter print drive // bip39 with en option by default, but we have fr, es, pt, it, ko, cz, zh-hant and zh-hans as well
  • WELL LANE HELD // rfc1751
  • configurational candidate // eng1
  • Uniform X-ray November // nato

Installation

recommended way (you may want to apt install pipx for this):

pipx install pinkhash

or older way:

pip install pinkhash

CLI Usage

# get pink hash for stdin, default mode with bip39/en
$ echo "Hello world!" | pink 
hybrid interest chimney

# or in French...
$ echo "Hello world!" | pink  -o fr
gazelle griffure caméra

# Nato alphabet, 5 words
$ echo "Hello world!" | pink  -l nato -w 5
Charlie Zulu Tango Juliett Oscar

# eng1 always returns 2 words, no matter how many we ask
$ echo "Hello world!" | pink  -l eng1 -w 42
chief clioquinol

How to get pinkhash for files:

# pink can hash many files
$ pink *txt
cookies.txt: pelican number item
DNS.txt: shadow expire inhale
log.txt: absurd now caution

Python usage

Get pinkhash for a str with all default settings (Bip39 language as default).

from pinkhash import PinkHash
pink = PinkHash()
print(pink.convert('Hello world!'))
from pinkhash import PinkHash
import sys

pink = PinkHash(language_name='nato', nwords=3)
data = sys.stdin.buffer.read()
r = pink.convert(data)
print(r)

Languages

Each method to convert hash into words in Pinkhash is called an language. For example, nato is one language and rfc1751 is another language. Do not confuse this with a national language. Pinkhash now has built-in eng1 language (which produces adjective+noun pair from large set of english words) but in future there could be another english language, e.g. one which uses only simple popular words, or one which builds longer phrases or one which produces poems or haiku.

Usually (but not always) language can produce hashes of specified (-w) number of words, but eng1 never produces more then 2 words. Also pinkhash will not produce more words then needed to cover only lower 64bits of sha1 hash of input.

BIP-39 language (based on BIP-0039) has 10 options (wordlists), choose it with -o. See all options with -h/--help.

Disclaimer

While pinkhash uses RFC1751 and BIP-0039, it's not strictly following it! Pinkhash has it's own algorithms and just uses wordlists from these standards. Do not use pinkhash where you need strict standard compliance.

Mnemonical pink hashes are NOT cryptographically strong.

Contributions

Contributions are welcome! Write me to yaroslaff / gmail.com to discuss or make a ticket and/or PR.

Metadata

Release files for pinkhash 0.0.7

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pinkhash 0.0.7
File Size Uploaded Provenance
pinkhash-0.0.7.tar.gz 324.5 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for pinkhash 0.0.7
File Interpreter ABI Platform
pinkhash-0.0.7-py3-none-any.whl Python 3 none any Details

Total release size: 649.5 kB

Release files / pinkhash-0.0.7.tar.gz

Download URL pinkhash-0.0.7.tar.gz
Size 324.5 kB
Tags Source
SHA-256 checksum
How to use checksums
8d1a7b0d0bf3081a5353f0db04b37e829fe5969ba362359fa22c007d18bfeeb2
BLAKE2b-256 checksum
How to use checksums
2cc2cade4c744331850bc22784d57b4d019395c62912811bbbaf0741a5a163f5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via python-httpx/0.27.0

Release files / pinkhash-0.0.7-py3-none-any.whl

Download URL pinkhash-0.0.7-py3-none-any.whl
Size 325.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
b725bba194debea3ad535c11a732aa780956b30f606743bdfb0054b9039fd4f1
BLAKE2b-256 checksum
How to use checksums
36ea4b3ddf99303d4f7a9fd405f7f411c580401cc3f3932ee93c607b78df16a6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via python-httpx/0.27.0

Security for pinkhash 0.0.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page