Java 比特币BTC离线创建地址

有遇到疑惑的可加QQ群交流:1057160243

比特币地址生成过程,如图所示

比特币的生成过程分为以下几步:

a. 产生一个随机数,作为私钥;

b. 由私钥生成公钥;

c. 将生成的公钥进行SHA256运算;

d. 将生成的256位哈希值进行RIPEMD160运算;

e. 将版本号和公钥哈希值进行双SHA256运算得到校验码;

f. 将版本号、公钥哈希和校验码连接并进行Base58转换。

public Object createAddress(HttpServletRequest request, HttpServletResponse response) throws Exception {
        Map<String, Object> map = new LinkedHashMap<>();

        String path = "m/44'/60'/0'/0/0";
        String[] pathArray = path.split("/");
        // 设置网络参数
        NetworkParameters params = MainNetParams.get();
        // 随机数
        SecureRandom secureRandom = new SecureRandom();
        // 生成助记词种子
        DeterministicSeed ds = new DeterministicSeed(secureRandom, 128, "");
        List<String> mnemonicCode = ds.getMnemonicCode();

        StringBuilder sb = new StringBuilder();
        mnemonicCode.stream().forEach(code -> {
            sb.append(code).append(" ");

        });
        String mcCode = sb.toString();
        // 助记词字符串
        String mnemonicCodeStr = mcCode.substring(0, mcCode.length() - 1);
        map.put("mnemonicCodeStr", mnemonicCodeStr);

        //通过助记词生成种子
        DeterministicSeed deterministicSeed = new DeterministicSeed(mnemonicCode, null, "", 0);
        DeterministicKeyChain dk = DeterministicKeyChain.builder().seed(deterministicSeed).build();

        // btc 普通地址bip44路径
        List<ChildNumber> btcPath1 = ImmutableList.of(
                new ChildNumber(44, true),
                new ChildNumber(0, true),
                new ChildNumber(0, true),
                new ChildNumber(0, false),
                new ChildNumber(0, false));

        

        // 1开头的普通地址================
        DeterministicKey keyByPath = dk.getKeyByPath(btcPath1, true);
        BigInteger privkey = keyByPath.getPrivKey();
        ECKey ecKey = ECKey.fromPrivate(privkey);
        LegacyAddress legacyAddress = LegacyAddress.fromKey(params, ecKey);
        String privateKeyBtc = ecKey.getPrivateKeyAsWiF(params);

        map.put("address", legacyAddress.toBase58());
        map.put("privateKey", privateKeyBtc);
        return ResponseBuilder.custom().success("success", 0).data(map).build();
    }

有遇到疑惑的可加QQ群交流:1057160243

猜你喜欢

转载自blog.csdn.net/u010138906/article/details/115247032