以太坊公钥表示形式

以太坊 区块链

首先看一下以太坊密钥和地址

https://github.com/inoutcode/ethereum_book/blob/master/%E7%AC%AC%E4%BA%94%E7%AB%A0.asciidoc#example_pubkey

生成以太坊公钥密钥为:

ECKeyPair ecKeyPair = ECKeyPair.create(new BigInteger(privateKey, 16));

String  pubKey=Numeric.toHexStringNoPrefix(ecKeyPair.getPublicKey()));

 String privKey=Numeric.toHexStringWithPrefix(ecKeyPair.getPrivateKey()));

 String address="0x" + Keys.getAddress(ecKeyPair);

发现公钥是128位的,与 bip39 33不一样,重新看一下上面以太坊密钥和地址的文章发现问题:

在以太坊中,你可以看到公钥以66个十六进制字符(33字节)的十六进制序列表示。这是从行业联盟标准高效密码组(SECG)提出的标准序列化格式采用的,在http://www.secg.org/sec1-v2.pdf[Standards for Efficient Cryptography(SEC1)]中有记载。该标准定义了四个可用于识别椭圆曲线上点的可能前缀:

Prefix

Meaning

Length (bytes counting prefix)

0x00

Point at Infinity

1

0x04

Uncompressed Point

65

0x02

Compressed Point with even Y

33

0x03

Compressed Point with odd Y

33

发表评论