Bech32 / Bech32m 编码与解码器

查看 bc1q、bc1p、ltc1、lnurl1 或 npub1 字符串的内部结构,或由见证程序或原始字节构造一个。自动识别 bech32 与 bech32m 并验证校验和。

自动识别 bech32 与 bech32m,显示人类可读部分、5 位数据、原始字节,以及 bc1 / tb1 / ltc1 地址的 SegWit 见证版本和见证程序。

由浏览器中的 JavaScript 计算。地址不会被上传或存储。

什么是 bech32 编码 / 解码器?

bech32 编码 / 解码器在原始字节与 BIP-173 字符串格式之间转换。该格式由人类可读部分(bc、ltc、lnurl、npub)、分隔符 1、以 32 字符字母表表示的 5 位分组数据,以及 6 个字符的 BCH 校验和组成。Bech32m(BIP-350)是同一格式但使用不同的校验和常量,SegWit 版本 1 及以上(Taproot bc1p…)必须使用它。

实例演示

见证程序 751e76e8199196d454941c45d1b3a323f1433bd6,版本 0,hrp 为 bc,编码后得到 bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t4,即 BIP-173 的参考地址。解码它会得到版本 0、一个 20 字节的程序以及编码类型 bech32。同一程序若使用版本 1,则需要 bech32m,并以 bc1p 开头。

bech32 的应用场景

bech32、bech32m 与 Base58Check 的区别

编码校验和纠错检测典型用途
bech32(BIP-173)6 个字符,常量 190 字符内最多 4 处替换错误可保证检出bc1q SegWit v0、LNURL、闪电发票、npub
bech32m(BIP-350)6 个字符,常量 0x2bc830a3同上,并修复了末尾 p 之前的插入漏洞bc1p Taproot、SegWit v1 及以后
Base58Check双重 SHA-256 的 4 字节概率性,无保证比特币 1… 和 3…、Tron T…、XRP

常见错误

要验证完整的比特币地址(包括 Base58 传统格式),请使用比特币地址验证器。

常见问题

什么是 bech32?

BIP-173 为比特币 SegWit 地址定义的一种编码:人类可读部分、分隔符 1,以及用 32 字符字母表表示的数据,外加 6 个字符的 BCH 校验和,最多可检出 4 处错误。它不区分大小写,大写形式便于生成二维码。

bech32 和 bech32m 有什么区别?

Bech32m(BIP-350)把校验和常量从 1 改为 0x2bc830a3,以修复 bech32 在末字符为 p 时的一个弱点。SegWit 版本 0(bc1q)继续使用 bech32;版本 1 的 Taproot 及以后(bc1p)使用 bech32m。解码器会两种都尝试。

为什么数据不能转换成整字节?

Bech32 承载的是 5 位分组。SegWit 地址由 1 个分组的见证版本加上程序组成,因此原始数据不是字节对齐的;工具会分别显示版本和程序。LNURL、npub 等其他用途则以填充方式编码整字节。

可以解码 LNURL 和 Nostr 密钥吗?

可以。lnurl1… 解码为 URL 文本;npub1… 和 nsec1… 解码为 32 字节密钥。切勿在任何地方(包括本页)粘贴 nsec 或任何私钥。

bech32 字符串的最大长度是多少?

BIP-173 把地址限制在 90 个字符以内,以保证 4 处错误可检出。闪电发票和 LNURL 由于携带的数据远多于此,有意忽略了这一限制;校验和仍然有效,只是对超长字符串的保证较弱。

如何从公钥生成 SegWit 地址?

对压缩公钥先做 SHA-256 再做 RIPEMD-160,得到 20 字节程序,选择见证版本 0 和 hrp bc。Taproot 则使用 32 字节的 x-only 输出密钥并选择版本 1。本页只负责编码步骤;密钥哈希不在其范围内。