BIP 173 / BIP 350 · Bitcoin SegWit

Bech32 converter

Bitcoin SegWit address encoding with built-in checksum for error detection. Bech32 (BIP 173) for v0 and Bech32m (BIP 350) for v1+ (Taproot). Alphabet is qpzry9x8gf2tvdw0s3jn54khce6mua7l.

0 bytes
encodes to
or decode
0 chars

How to use this tool

  1. Pick the variant with the radio buttons: Bech32 (BIP 173) for v0 SegWit, or Bech32m (BIP 350) for v1+ Taproot.
  2. Set the HRP (human-readable part) — bc for mainnet, tb for testnet.
  3. Paste space-separated hex bytes into Hex data → Bech32 — the first byte is the witness version, the rest is the witness program.
  4. The address appears instantly in Bech32 address; hit Copy result to grab it to your clipboard.
  5. To decode, paste a bc1… address into Bech32 → Hex data and the hex payload appears below it.
  6. Use Clear any time to reset a box and start over.

Why this tool is helpful

Generate SegWit addresses

Build bc1… P2WPKH, P2WSH, and Taproot addresses from a witness version plus a witness program, encoded with the correct BCH checksum.

Verify address integrity

The built-in BCH checksum catches typos. Decoding surfaces invalid characters, missing separators, and checksum mismatches instead of silently accepting a bad address.

Switch between Bech32 and Bech32m

Choose the right checksum constant for your target: Bech32 for v0, Bech32m for v1+ (Taproot), per BIP 173 and BIP 350.

Work with custom HRPs

Encode testnet or regtest addresses with tb, bcrt, or any prefix your network defines — not just mainnet bc.

Inspect the raw payload

Decode an address back to its witness version and program bytes as hex, so you can see exactly what's behind the string.

Stay private

Everything runs in your browser. Nothing is uploaded, logged, or sent to a server — safe for addresses and keys under test.

FAQ

What are Bech32 and Bech32m?

They're the SegWit address encodings defined in BIP 173 (Bech32) and BIP 350 (Bech32m). Both use a 32-character alphabet and a BCH checksum; they differ only in the checksum constant.

What's the difference between Bech32 and Bech32m?

The checksum constant. Bech32 uses 1; Bech32m uses 0x2bc830a3. Bech32 has a weakness where certain data lengths can fail checksum detection, so Bech32m is required for v1+ (Taproot) outputs.

What is the HRP?

The human-readable part — the prefix before the 1 separator. It identifies the network: bc for Bitcoin mainnet, tb for testnet. This tool lets you override it for other networks.

Why does my address start with "bc1"?

That's the mainnet HRP bc followed by the mandatory 1 separator. On testnet you'll instead see tb1.

Why do I get "Invalid checksum" when decoding?

The address was likely mistyped, truncated, or the wrong variant was used. The BCH checksum no longer matches the data, so the decoder rejects it rather than returning garbage.

Does this tool sign transactions or handle private keys?

No. It only encodes and decodes the address string itself. It never touches private keys, never signs anything, and never broadcasts a transaction.

Does any of my data leave my browser?

Never. All encoding and decoding happens locally in JavaScript. Your input is not sent to, stored on, or logged by any server.