# Bech32 Encoding Decoding

> Encode and decode bech32 strings using the local bech32 CLI.

- Skill: `input-output-hk/bech32-encoding-decoding` (Agent Skill)
- Install (CLI): `npx skillmds@latest add input-output-hk/bech32-encoding-decoding`
- Raw SKILL.md: https://api.skillmd.com/api/skills/input-output-hk/bech32-encoding-decoding/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: input-output-hk (https://skillmd.com/u/input-output-hk)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/input-output-hk/bech32-encoding-decoding

---


# Bech32 Encoding/Decoding Skill

Use this skill to convert between hex/base58 inputs and bech32 strings, or to decode bech32 back to base16. The local `bech32` binary reads data from standard input and writes to standard output.

## When to use
- When you need to inspect or transform bech32 strings for debugging or tests
- When you need to encode raw bytes (hex/base58) to a bech32 prefix
- When you need to decode a bech32 string to base16

## Tooling
- `bech32 [PREFIX]` converts to/from bech32 strings
- Input is read from `stdin`
- Output is printed to `stdout`
- Supported input formats: Base16, Bech32, Base58

## Operating rules (must follow)
- Confirm the target human-readable prefix (HRP) before encoding
- Prefer piping input via `<<<` or `printf` so the payload is explicit
- For decoding, omit the prefix argument to ensure base16 output
- Never alter user data; report exact output from the tool

## Execution workflow

### Step 1: Identify the input type
- Base16 hex string (preferred for raw bytes)
- Base58 string
- Bech32 string

### Step 2: Encode to bech32
```bash
bech32 <prefix> <<< <hex-or-base58-input>
```

### Step 3: Decode from bech32 to base16
```bash
bech32 <<< <bech32-input>
```

## Examples

Encode hex to bech32:
```bash
bech32 addr <<< 71ab222c7f223c4c0e297d11fbf6e6a082eb41db5e8539fcfb822c76c3
```
Expected output:
```text
addr1wx4jytrlyg7ycr3f05glhahx5zpwkswmt6znnl8msgk8dsccv8766
```

Decode bech32 to hex:
```bash
bech32 <<< addr1wx4jytrlyg7ycr3f05glhahx5zpwkswmt6znnl8msgk8dsccv8766
```
Expected output:
```text
71ab222c7f223c4c0e297d11fbf6e6a082eb41db5e8539fcfb822c76c3
```

Convert from base58 to bech32:
```bash
bech32 base58_ <<< Ae2tdPwUPEYy
```
Expected output:
```text
base58_1p58rejhd9592uusa8pzj2
```

## Common pitfalls
- Using the wrong HRP when encoding; bech32 is prefix-sensitive
- Passing bech32 input with a prefix argument (this re-encodes instead of decoding)
- Including whitespace or newlines inside the input payload
- Prefixing hex input with `0x`; the tool expects raw hex only

## Error signals
- `Unable to detect input encoding` usually means the input contains a prefix (`0x`) or non-hex characters

## Diagnosis workflow (quick)
1. Confirm input type and remove any `0x` prefix for hex.
2. If encoding: verify the HRP you intend to use.
3. If decoding: ensure you omit the prefix argument.
4. Re-run with a minimal test case to validate the tool:
   - `bech32 base16_ <<< 706174617465`
   - `bech32 <<< base16_1wpshgct5v5r5mxh0`

## References
- `bech32 --help`

