简介

这是一个Bip44确定性算法的Java实现库(Android和java平台,都可以使用),可以生成12个助记词,seed种子和根据path路径生成路径的私钥.

对Bip44确定算法不了解的可以看我之前的一篇文章:
https://52it.party/2018/07/30/%E5%8C%BA%E5%9D%97%E9%93%BE%E5%BC%80%E5%8F%91%E4%B9%8B%E7%A1%AE%E5%AE%9A%E6%80%A7%E7%AE%97%E6%B3%95bip32%EF%BC%8Cbip39%EF%BC%8Cbip44/

项目地址:https://github.com/wypeng2012/Bip44ForJava

欢迎star


- 如何使用

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45

//get 12 words
List<String> words = Bip44Utils.generateMnemonicWords();
System.out.println("words: " + words.toString());

// get bip39 seed
byte[] seed = Bip44Utils.getSeed(words);
System.out.println("seed: " + new BigInteger(1,seed).toString(16));

//get PrivateKey by path
BigInteger pri1 = Bip44Utils.getPathPrivateKey(words,"m/44'/194'/0'/0/0");
System.out.println("pri1: " + pri1.toString(16));

BigInteger pri2 = Bip44Utils.getPathPrivateKey(words,seed,"m/44'/194'/0'/0/0");
System.out.println("pri2: " + pri2.toString(16));

byte[] pri3 = Bip44Utils.getPathPrivateKeyBytes(words, "m/44'/194'/0'/0/0");
System.out.println("pri3: " + new BigInteger(1,pri3).toString(16));

byte[] pri4 = Bip44Utils.getPathPrivateKeyBytes(words, seed,"m/44'/194'/0'/0/0");
System.out.println("pri4: " + new BigInteger(1,pri4).toString(16));

byte[] pri5 = Bip44Utils.getDefaultPathPrivateKeyBytes(words, 194);
System.out.println("pri5: " + new BigInteger(1,pri5).toString(16));

//if you use bitcoinj library,you can generate bitcoin privatekey and public key and address like this:

BigInteger pribtc = Bip44Utils.getPathPrivateKey(words,"m/44'/0'/0'/0/0");

ECKey ecKey = ECKey.fromPrivate(pribtc);

String publicKey = ecKey.getPublicKeyAsHex();
String privateKey = ecKey.getPrivateKeyEncoded(networkParameters).toString();
String address = ecKey.toAddress(networkParameters).toString();


//if you use web3j library,you can generate bitcoin privatekey and public key and address like this:

BigInteger prieth = Bip44Utils.getPathPrivateKey(words,"m/44'/60'/0'/0/0");

ECKeyPair ecKeyPair = ECKeyPair.create(prieth);

String publicKey = Numeric.toHexStringWithPrefix(ecKeyPair.getPublicKey());
String privateKey = Numeric.toHexStringWithPrefix(ecKeyPair.getPrivateKey());
String address = "0x" + Keys.getAddress(ecKeyPair);

打印结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14

words: [course, question, calm, west, basket, kitten, salmon, absorb, tool, ankle, mixed, endorse]

seed: c03f5488370482658066b96a803fcceac46b68181024a545d814344cbf7d9da9b478a20d0b95ebef268b7c24afd4540c59a4567146d45d2db891ca2576d409c7

pri1: 6ef7a396546d4fcf26865e54033ad48db858d19b5a08782014a652f4b5469037

pri2: 6ef7a396546d4fcf26865e54033ad48db858d19b5a08782014a652f4b5469037

pri3: 6ef7a396546d4fcf26865e54033ad48db858d19b5a08782014a652f4b5469037

pri4: 6ef7a396546d4fcf26865e54033ad48db858d19b5a08782014a652f4b5469037

pri5: 6ef7a396546d4fcf26865e54033ad48db858d19b5a08782014a652f4b5469037

- 远程依赖

  1. Maven
1
2
3
4
5
<dependency>
<groupId>party.52it</groupId>
<artifactId>Bip44ForJava</artifactId>
<version>1.0.0</version>
</dependency>
  1. Gradle
1
2
3
4
5
compile 'party.52it:Bip44ForJava:1.0.0'

or

implementation 'party.52it:Bip44ForJava:1.0.0'
  1. Ivy
1
<dependency org='party.52it' name='Bip44ForJava' rev='1.0.0'/>

- coin_type link

https://github.com/satoshilabs/slips/blob/master/slip-0044.md