主页 > imtoken钱包注册 > 为什么不能输入错误的比特币地址?

为什么不能输入错误的比特币地址?

imtoken钱包注册 2023-02-23 05:28:39

我在进行比特币转账时会输入错误的比特币地址吗? 刚接触比特币的朋友一定有这样的顾虑。 虽然比特币地址看起来像一长串随机生成的字符串,但它具有特定的结构。 如果比特币地址中的某个字符有错误,程序会检查错误。

充值代理比特币_2021年5月比特币持币地址数量_比特币充值地址在哪里

比特币地址的结构比特币地址和私钥是通过ECDSA椭圆曲线加密算法计算出来的。 从ECDSA私钥计算出常用的Bitcoin-qt格式比特币地址需要十步。

从以上十个步骤我们可以看出。 第八步中的四个字节被取出来进行校验和校验。 检查一个地址是否有效,我们只需要将第十步的结果取反比特币充值地址在哪里,去掉最后四个字节得到第四步的结果,然后再做两次SHA256运算,看是否可以用这个重新计算结果只需从四个字节开始。

充值代理比特币_2021年5月比特币持币地址数量_比特币充值地址在哪里

比特币充值地址在哪里_2021年5月比特币持币地址数量_充值代理比特币

所以当你输入一个比特币地址时比特币充值地址在哪里,像Blockchain这样的在线钱包会使用上面的方法来检查地址是否正确。 当然,我们一般都是贴比特币地址,这样出错的几率比较小。 校验和不能 100% 保证检测到错误的地址。 有人计算过,人工输入比特币地址逃过检查的概率是32万分之一。

比特币地址校验代码 为了更好的理解这个过程,下面提供一个用python编写的比特币地址校验程序。

从 hashlib 导入 sha256

2021年5月比特币持币地址数量_比特币充值地址在哪里_充值代理比特币

digits58 = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'

def decode_base58(bc, 长度):

n = 0

2021年5月比特币持币地址数量_充值代理比特币_比特币充值地址在哪里

对于 bc 中的 char:

n = n * 58 + digits58。 索引(字符)

返回 n.to_bytes(长度,'大')

2021年5月比特币持币地址数量_比特币充值地址在哪里_充值代理比特币

def check_bc(bc):

bcbytes = decode_base58(bc, 25)

返回 bcbytes[-4:] == sha256(sha256(bcbytes[:-4]).digest()).digest()[:4]

2021年5月比特币持币地址数量_比特币充值地址在哪里_充值代理比特币

如果 __name__ == '__main__':

bc = '1AGNa15ZQXAZUgFiqJ2i7Z2DPU2J6hW62i'

断言 check_bc(bc)

assert not check_bc( bc.replace('N', 'P', 1) )

断言 check_bc('1111111111111111111114oLvT2')

assert check_bc("17NdbrSGoUotzeGCcMMCqnFkEvLymoou9j")