EOS
私钥转WIF
EOS使用与Bitcion WIF地址相同的版本、校验、编码方案,并与现有库兼容。
1.一个全是0的示例私钥,它是一个32字节的long(此处用16进制表示)
0000000000000000000000000000000000000000000000000000000000000000
2.添加一个版本字节0x80
到最前面,这个字节其实代币Bitcoin mainnet。当编码后这个版本字节也标志着这是一个私钥,与比特币不同,EOS总是使用压缩后的公钥(从私钥衍生出来的)所以并不会在私钥后面添加0x01
800000000000000000000000000000000000000000000000000000000000000000
3.在上面已添加版本(就是指已添加0x80
字节)key上执行二进制SHA-256
ce145d282834c009c24410812a60588c1085b63d65a7effc2e0a5e3a2e21b236
4.对上面的结果再次执行SHA-256
0565fba7ebf8143516e0222d7950c28589a34c3ee144c3876ceb01bfb0e9bb70
5.在上面的结果上再取前4个字节,这个是校验和
0565fba7
6.把上面这个校验和添加到第二步执行后结果里的后面
8000000000000000000000000000000000000000000000000000000000000000000565fba7
7.把上面这个结果用Base58编码
5HpHagT65TZzG1PH3CSu63k8DbpvD8s5ip4nEB3kEsreAbuatmU
WIF转私钥
把上面的顺序反过来就OK了
私钥转公钥
- 根据私钥bytes计算出公钥bytes(Java中通过bitcoinJ实现:
val publicKeyBytes = ECKey.fromPrivate(privateKeyBytes)
) - 将公钥bytes进行
RIPEMD160
算法加密 - 将上一步得到的结果取前4位为checksumBytes
- 将第一步原始公钥bytes与上一步的checksumBytes拼接
- Base58.encode()编码上一步的结果(注:不要使用Base58.encodeChecked()),再在前面添加字符串
EOS
,结果即为公钥
网友评论