可以使用以下使用bitcoinj master分支的代码生成有效的旧比特币密钥对:
import org.bitcoinj.core.Address;
import org.bitcoinj.core.DumpedPrivateKey;
import org.bitcoinj.core.ECKey;
import org.bitcoinj.core.NetworkParameters;
public class GeneratePrivateKeyBulk {
public static void main(String[] args) {
ECKey key = new ECKey();
Address pubAddress = new Address(NetworkParameters.prodNet(), key.getPubKeyHash());
DumpedPrivateKey privKey = key.getPrivateKeyEncoded(NetworkParameters.prodNet());
System.out.println("Public address: " + pubAddress.toBase58() + "; Private key: " + privKey.toBase58());
}
}
这创建了可用的传统base58编码公共地址和私钥,例如比如1ERzRYYdbibaQt2kuNfgH8spuoqQxYkwQb
,L3AuZ2vNt11ac2xSi6AYwzXyftqSVPcSuHNdTsSuRfknXvoRtWzF
。
问题是如何进行相同操作以获得 segwit密钥对?
我查看了bitcoinj docs,但找不到任何直接以segwit格式生成地址的API。
通过查看tests和segwit pull request,我发现以下代码(附加到上面的代码中)会生成一个segwit地址(即以3
开头的地址,例如31uLnxKteEYa2u1vgWyVPkTpVfUGduCV82
)
Script script = ScriptBuilder.createP2SHOutputScript(1, Collections.singletonList(key));
Address segwitAddress = Address.fromP2SHScript(NetworkParameters.prodNet(), script);
System.out.println("Segwit address: " + segwitAddress.toBase58());
我的理解是上面的代码应该在multisig场景中使用,因此我不确定这是否是从单个私钥派生segwit地址的正确方法。这是生成纸质文件钱包的正确/可靠/安全的代码吗?
另外,有没有办法使用bitcoinj为私钥添加BIP38密码保护?类BIP38PrivateKey
只有从现有base58表示解密BIP38密钥的方法,但没有BIP38密码加密的方法。