Developer's toolbox: hashes, HMAC, CRC, ciphers, IP/subnet, time, number and string conversions. Everything runs locally in the popup — nothing is sent anywhere.
Standalone version: https://s12v.github.io/hasher/
Everything is computed in the popup: the extension makes no network requests and collects nothing — no analytics,
no telemetry, no accounts. What you type stays in the window and is gone when you close it; only the chosen tab
and theme are kept in localStorage. The only permission requested is clipboardWrite, used when you click a result.
The standalone page is static and calls nothing either. Full text: PRIVACY.md, also at https://s12v.github.io/hasher/privacy.html.
Chrome Web Store, or the standalone page above — same code, no install.
To run from source: git clone https://github.com/s12v/hasher, open chrome://extensions, enable Developer mode,
Load unpacked → select the hasher directory.
- Hash: SHA-256, SHA-512, SHA-1, MD5, SHA-3 (256, 512), Keccak-256, SHA-384, SHA-224, RIPEMD-160, BLAKE2b (256, 512); SRI string for
<script integrity>; base64 hints for SHA-256/512 - HMAC: SHA-256, SHA-1, SHA-512, SHA-384, MD5 (base64 hints for SHA-256/512)
- CRC: CRC-32, CRC-32C, CRC-16/MODBUS, CRC-16/CCITT-FALSE, CRC-16/XMODEM, CRC-8, CRC-64/XZ, Adler-32 — one parametrised implementation checked against the CRC catalogue
- Password: passphrases from the EFF large wordlist (words, separator, digits, capitalize) and passwords (length, symbols) with the entropy estimate — a port of ppgen; random keys of N bytes as hex and Base64 (
openssl rand) - UUID: generate v4, v7, ULID; inspect a pasted UUID / ULID (version, variant, embedded time); UUID v5 from a name (DNS and URL namespaces)
- Cipher: AES-256-CBC with a passphrase, byte-compatible with
openssl enc -aes-256-cbc -pbkdf2 -a(PBKDF2-SHA256, 10000 iterations) and with the legacy-md md5format; decrypt detects which - IP: IPv4 and IPv6 — canonical form (RFC 5952), decimal, hex, binary, PTR, address type (private, link-local, ULA, documentation…); for a prefix: network, netmask / wildcard, first / last host, broadcast, hosts
- URL: scheme, host (IDN shown in Unicode), port, path, decoded query parameters, fragment, credentials, origin, normalized form
- Time: Unix time (s or ms), ISO 8601, RFC-1123 or
2019-02-27 09:36:55in → Unix s / ms, ISO 8601, RFC-1123, DATETIME UTC / local out, with weekday, ISO week and day of the year; durations both ways (90061→1d 1h 1m 1s,1h 30m/01:30:00/PT1H30M→ seconds) - Num: any base in (decimal,
0x,0b,0o, Roman, floating point), the others out — decimal, hex, octal, binary, Roman, bits, size in KiB / kB, IEEE-754 double / single; arbitrary size (BigInt) - Strings: length (chars / UTF-8 bytes / words / lines), UTF-8 ↔ Hex, UTF-16 BE / LE ↔ Hex, code points, case conversions (UPPER, lower, Title, Sentence, camelCase, PascalCase, snake_case, kebab-case, CONSTANT_CASE, slug)
- JWT: decode, claims with expiry as local time; verify HS* with a secret, RS* / PS* / ES* / EdDSA with a PEM or JWK public key (WebCrypto); sign a JSON payload with HS256
- Encode: Base64 / Base64url, Base32, Base58 — encode and decode (binary output shown as hex), encodeURI(), encodeURIComponent(), HTML special chars, ROT13
- Cron: schedule builder (every N minutes, hourly, daily, weekly with weekdays, monthly, yearly) ↔ crontab expression, plain English and the next 5 run times; six-field expressions with seconds (Quartz, Spring)
- JSON: pretty-print, minify and YAML (optionally with sorted keys), quote as a JSON string (a pasted string literal is unquoted on the spot), syntax errors with position
- Diff: compare two texts side by side, line by line, with changed characters highlighted; ignore whitespace / case
Usage: enter text and click on the result — it is copied to clipboard. mask on the Hash and HMAC tabs hides the input (for hashing passwords); Now on the Time tab inserts the current Unix time. The last tab and the theme (the icon toggles between following the OS and the opposite look) are remembered. Keyboard: Alt+1…9 / Alt+0 jump to a tab, Alt+[ / Alt+] go to the previous / next one.
No build step. Tests run on Node 20+ without dependencies:
npm test
Every calculate() in hasher.js is checked against vectors produced with openssl dgst / openssl enc.
On GitHub Actions npm run test:ci runs the same tests and adds a pass/fail summary and per-test annotations to the pull request.
To try it as an extension, load the directory unpacked (see Install). To try the standalone page, serve the
directory over HTTP (python3 -m http.server) — file:// blocks the wordlist fetch on the Password tab.
- Set the same new version in
manifest.jsonandpackage.json, commit. - Tag and push:
git tag v2.2.0 && git push origin master v2.2.0. - The Release workflow runs the tests, builds
hasher-2.2.0.zip(npm run builddoes the same locally intodist/) and attaches it to a GitHub Release. - Upload the zip in the Chrome Web Store developer dashboard.
MIT. Bundled libraries: crypto-js (MIT), js-sha3 (MIT), blakejs (MIT), EFF large wordlist (CC BY 4.0).