Bech32 是一种使用 32 个字符的字母表以人性化的方式对二进制数据(特别是比特币地址)进行编码的算法。Bech32 字母表包含小写字母和数字,但删除了数字 1 以及字母 b、i 和 o。
Bech32 字母表的设计与其他编码方案类似,都试图删除视觉上相似的字母。然而,字母表的顺序却很特别:
qpzry9x8gf2tvdw0s3jn54khce6mua7l
我稍后会解释这种排序的动机。以下是按常规顺序排列的相同字母表,而不是 Bech32 使用的顺序:
023456789acdefghjklmnpqrstuvwxyz
Bech32 算法不仅仅将 5 位字表示为字母数字字符。完整算法记录在此处。该算法应用于 RIPEMD-160 哈希的输出,因此位数是 5 的倍数。
Bech32 算法包含一个 BCH(Bose–Chaudhuri–Hocquenghem)校验和,并因其校验和而得名。
请注意,BCH 校验和并非加密哈希,而是一种纠错码。它的目的是捕捉错误,而不是阻止恶意攻击。这与使用部分 SHA256 哈希的Base58check不同。Base58check 可以检测错误,但无法纠正错误。
出乎意料的是,我费了好大劲才找到 Bech32 使用的 BCH( n , d ) 代码的具体细节。我找到的所有资料要么没有给出n和d的值,要么给出了不同的值。无论如何,Bech32 字母表的顺序是经过精心设计的,这样一来,人类更容易犯的错误就更有可能被 BCH 检测到并纠正。
相关文章
Bech32 编码一文最先出现在John D. Cook上。
原文: https://www.johndcook.com/blog/2025/09/09/bech32-encoding/