返回

NEO学习笔记,从WIF到地址

见解分享

2018年伊始,首先给大家拜个年,Happy Neo Year。新年伊始,总得写点什么,就打算继续开学习笔记系列,一点点仔细地分析NEO。今天就来说说从WIF到地址的这一串关系。

好了,写完了。^_^

当然,如果你想要搞清楚他们之间具体的计算方法,我们接着往下看。

很遗憾base58check是目前为止我最头疼的一个地方,对于前端开发来说,实现base58check是一件非常痛苦的事情,因为base58check里面涉及到了不少的数学运算。

本文将

  • 解释NEO中的WIF、地址、私钥、公钥、哈希算法、数字签名和加密货币之间的关系。
  • 提供从WIF到地址的计算过程的详细步骤和示例代码。
  • 帮助读者理解NEO中的加密技术。

什么是WIF?

WIF的全称是Wallet Import Format,它是一种用于存储私钥的格式。WIF由51个字符组成,其中前33个字符是私钥,后18个字符是校验码。WIF的格式如下:

Base58(privkey || checksum)

其中:

  • privkey是32字节的私钥。
  • checksum是4字节的校验码。

什么是地址?

NEO地址是20字节的十六进制字符串。它是由公钥派生而来的。NEO地址的格式如下:

Base58(pubkey_hash)

其中:

  • pubkey_hash是公钥的哈希值。

私钥和公钥是什么关系?

私钥和公钥是一对密钥。私钥是保密的,不能泄露给任何人。公钥是可以公开的。

私钥可以用来生成公钥,但是公钥不能用来生成私钥。

哈希算法是什么?

哈希算法是一种将任意长度的数据转换为固定长度的数据的函数。哈希算法具有以下特性:

  • 单向性:给定一个哈希值,不可能找到与之对应的原始数据。
  • 抗碰撞性:不可能找到两个具有相同哈希值的数据。

数字签名是什么?

数字签名是一种使用私钥对数据进行签名的技术。数字签名具有以下特性:

  • 真实性:数字签名可以证明数据的来源。
  • 完整性:数字签名可以保证数据在传输过程中没有被篡改。

加密货币是什么?

加密货币是一种使用密码学技术来确保安全性和匿名性的数字货币。加密货币具有以下特性:

  • 去中心化:加密货币不受任何中央机构的控制。
  • 安全性:加密货币使用密码学技术来确保安全。
  • 匿名性:加密货币可以保护用户的隐私。

从WIF到地址的计算过程

从WIF到地址的计算过程如下:

  1. 将WIF解码为私钥。
  2. 使用私钥生成公钥。
  3. 对公钥进行哈希运算,得到公钥哈希值。
  4. 将公钥哈希值进行Base58编码,得到地址。

示例代码

import base58
import hashlib
import ecdsa

# 将WIF解码为私钥
wif = 'L1n4jDjEuG3DZG6CU28UZGHcjVudusDNrkvBq8ykxtM7Pfd3kEu'
privkey = base58.b58decode_check(wif)

# 使用私钥生成公钥
sk = ecdsa.SigningKey.from_string(privkey, curve=ecdsa.SECP256k1)
vk = sk.get_verifying_key()

# 对公钥进行哈希运算,得到公钥哈希值
pubkey_hash = hashlib.sha256(vk.to_string()).digest()

# 将公钥哈希值进行Base58编码,得到地址
address = base58.b58encode_check(pubkey_hash)

# 打印地址
print(address)

输出结果

AH9khdcDBEa9JH5f4eG32X5X53WkWXR6j