生成比特币钱包地址java示例(动态生成)

【摘要】 地址是一个随机查找的十六进制字符串,在比特币网络中用于发送和接收比特币。它是公私不对称ECDSA密钥的公共部分。相应的私钥用于签署比特币交易,作为交易时来自你的确认和证明

那么每个用户都有不同的地址,就需要我们动态生成了,网上有很多用 openssl工具来生成的,可以是可以,但是应用的时候也不能手动为每一个用户生成对吧
所以全部用代码生成
全代码以及释义如下 …


那么每个用户都有不同的地址,就需要我们动态生成了,网上有很多用 openssl工具来生成的,可以是可以,但是应用的时候也不能手动为每一个用户生成对吧

所以全部用代码生成

全代码以及释义如下

		KeyPairGenerator keyGen = KeyPairGenerator.getInstance("EC"); //使用指定椭圆曲线是secp256k1 ECGenParameterSpec ecSpec = new ECGenParameterSpec("secp256k1"); keyGen.initialize(ecSpec); KeyPair kp = keyGen.generateKeyPair(); PublicKey pub = kp.getPublic(); PrivateKey pvt = kp.getPrivate(); ECPrivateKey epvt = (ECPrivateKey) pvt; String sepvt = adjustTo64(epvt.getS().toString(16)).toUpperCase(); System.out.println("s[" + sepvt.length() + "]:私钥 " + sepvt); ECPublicKey epub = (ECPublicKey) pub; ECPoint pt = epub.getW(); //ECDSA密钥由椭圆曲线上的点表示。该点的X和Y坐标包括公钥。它们在开头与“04”连接在一起代表公钥 String sx = adjustTo64(pt.getAffineX().toString(16)).toUpperCase(); String sy = adjustTo64(pt.getAffineY().toString(16)).toUpperCase(); String bcPub = "04" + sx + sy; System.out.println("bcPub length:" + bcPub.length() + ":公钥 " + bcPub); byte[] publicKey = new BigInteger(bcPub, 16).toByteArray(); //1 对公钥进行SHA-256加密 byte[] sha256Bytes = Utils.sha256(publicKey); System.out.println("sha256加密=" + Utils.bytesToHexString(sha256Bytes)); //2 使用RIPEMD160加密 RIPEMD160Digest digest = new RIPEMD160Digest(); digest.update(sha256Bytes, 0, sha256Bytes.length); byte[] ripemd160Bytes = new byte[digest.getDigestSize()]; digest.doFinal(ripemd160Bytes, 0); System.out.println("ripemd160加密=" + Utils.bytesToHexString(ripemd160Bytes)); //3 将版本号添加到上述加密结果之前,变成21位 byte[] networkID = new BigInteger("00", 16).toByteArray(); byte[] extendedRipemd160Bytes = Utils.add(networkID, ripemd160Bytes); System.out.println("添加NetworkID=" + Utils.bytesToHexString(extendedRipemd160Bytes)); //4 再次sha256加密 byte[] twiceSha256Bytes = Utils.sha256(Utils.sha256(extendedRipemd160Bytes)); System.out.println("两次sha256加密=" + Utils.bytesToHexString(twiceSha256Bytes)); //5 将两次SHA-256加密后的结果取前4bytes,作为地址的checksum byte[] checksum = new byte[4]; System.arraycopy(twiceSha256Bytes, 0, checksum, 0, 4); System.out.println("checksum=" + Utils.bytesToHexString(checksum)); //6 将checksum加到第3步结果后面,生成25位地址 byte[] binaryBitcoinAddressBytes = Utils.add(extendedRipemd160Bytes, checksum); System.out.println("添加checksum之后=" + Utils.bytesToHexString(binaryBitcoinAddressBytes)); //7 使用base58编码生成比特币的钱包地址 String bitcoinAddress = Base58.encode(binaryBitcoinAddressBytes); System.out.println("bitcoinAddress=" + bitcoinAddress);

  
 

借鉴:
https://www.e-learn.cn/topic/853057
https://www.imooc.com/article/23852

文章来源: blog.csdn.net,作者:东北_老乡,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/Goligory/article/details/116522263

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享