Bech32编码 原理

Posted thefist11

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Bech32编码 原理相关的知识,希望对你有一定的参考价值。

1. 产生

1.1 ben32编码

字符串最多有 90 个字符长

part1: 人类可读HRP human-readable part,标识数据的类型或某种意义。
. 必须包含 1 到 83 个 US-ASCII 字符,每个字符的值在 [33-126] 范围内。
. HRP 的有效性对于有的应用程序会严格限制。
part2: 分割符,始终是“1”
part3:data数据

  • 至少长6个字符
  • 只包含字母数字字符(地址中只包含0-9,az)
  • 不包括“1”,“B”,“I”,和“o”

1.2 ben32校验

由bech32_verify_checksum函数验证

def bech32_polymod(values):
  GEN = [0x3b6a57b2, 0x26508e6d, 0x1ea119fa, 0x3d4233dd, 0x2a1462b3]
  chk = 1
  for v in values:
    b = (chk >> 25)
    chk = (chk & 0x1ffffff) << 5 ^ v
    for i in range(5):
      chk ^= GEN[i] if ((b >> i) & 1) else 0
  return chk

def bech32_hrp_expand(s):
  return [ord(x) >> 5 for x in s] + [0] + [ord(x) & 31 for x in s]

def bech32_verify_checksum(hrp, data):
  return bech32_polymod(bech32_hrp_expand(hrp) + data) == 1
  • 最多影响 4 个字符的任何错误, 并且未能检测到更多错误的可能性不到 1e9分之一
  • 人类可读部分的处理方法是首先将每个字符的 US-ASCII 值的较高位输入校验和计算,然后是零,然后是低位。
def bech32_create_checksum(hrp, data):
  values = bech32_hrp_expand(hrp) + data
  polymod = bech32_polymod(values + [0,0,0,0,0,0]) ^ 1
  return [(polymod >> 5 * (5 - i)) & 31 for i in range(6)]

2. 纠错

BCH 码的特点之一是它们可用于纠错:将无效输入更改为有效输入

  • 副作用:如果犯了多个错误,则有效输入可能不是正确输入。
  • 对于演示,小写通常更可取,但在二维码中应该使用大写

以上是关于Bech32编码 原理的主要内容,如果未能解决你的问题,请参考以下文章

Bech32编码 隔离见证地址

Bech32编码 地址验证示例

币安智能链查询账户余额-解码bech32失败

markdown 打字稿...编码说明,提示,作弊,指南,代码片段和教程文章

STM32驱动美上美(SIQ-02FVC3)拨盘编码器硬件

STM32驱动美上美(SIQ-02FVC3)拨盘编码器硬件