首页 > 世链号 > 【比特币钱包】如何生成比特币钱包的地址呢?
傲娇小韭菜  

【比特币钱包】如何生成比特币钱包的地址呢?

摘要:从技术性方面了解,Bitcoin详细地址是由ECDSA密匙的公共性一部分转化成的,应用SHA-256和RIPEMD-160开展hash,以下文幻灯片上述,历经解决获得結果hash,最后运用base58校检编号对密匙开展编号。
BTC为先的数字货币从问世发展趋势迄今,融进了多种优秀技术性,区块链应用的运用不但确保了数字货币的商品流通便捷性,更充分发挥其数据加密性、不能伪造两大优点,颠覆式创新于数字货币的买卖,使之更为安全性。

          
 
区块链钱包的出現,也是为数据加密财产方便快捷商品流通的另外,增加了一份安全防范措施。区块链钱包指的是运用区块链应用开发设计的虚似虚拟货币商品的可视化工具,它应具有虚拟货币可买卖的特性,即支付款作用。

比特币钱包是根据BTC存有的,目地是让BTC储存更为安全性,合理的防止黑客入侵,并且运用比特币钱包中随机生成的比特币地址,能够与别人开展帐户上的BTC转帐。

怎样转化成比特币钱包详细地址?
 
Bitcoin详细地址做为一个任意搜索的十六进制字符串数组,在Bitcoin互联网中用以推送和接受Bitcoin。它归属于公与私不一样ECDSA密匙的公共性一部分。相对性应的公钥用以签定Bitcoin买卖,做为买卖时来源于客户的确定和证实。

从技术性方面了解,Bitcoin详细地址是由ECDSA密匙的公共性一部分转化成的,应用SHA-256和RIPEMD-160开展hash,以下文幻灯片上述,历经解决获得結果hash,最后运用Base58校检编号对密匙开展编号。

接下去一起掌握怎么使用JCE(java加密拓展),BouncyCastle(RIPEMD-160)及其最终在bitcoin库文件应用Base58编号作用来进行全部这种工作中。

转化成ECDSA密匙对

BTC应用ECDSA替代RSA做为重要优化算法。转化成以下:
 
             
 
为EllipticCurve优化算法建立KeyPairGenerator。

KeyPairGeneratorkeyGen=KeyPairGenerator.getInstance("EC");

运用特定椭圆曲线是secp256k1。

ECGenParameterSpececSpec=newECGenParameterSpec("secp256k1");
keyGen.initialize(ecSpec);

要是获得KeyPairGenerator,就能建立KeyPair即密匙对,进而获得公匙及其公钥。

KeyPairkp=keyGen.generateKeyPair();

PublicKeypub=kp.getPublic();

PrivateKeypvt=kp.getPrivate();

ECDSA公钥

开发人员可以对密匙的独享一部分开展储存,终究从公钥可以派长出公匙。

ECPrivateKeyepvt=(ECPrivateKey)pvt;

Stringsepvt=adjustTo64(epvt.getS().toString(16)).toUpperCase();

System.out.println("s["+sepvt.length()+"]:"+sepvt);

静态数据方法adjustTo64()只对包括流板0的十六进制字符串数组进行添充,因此总长做到64字符。

staticprivateStringadjustTo64(Strings){

switch(s.length()){

case62:return"00"+s;

case63:return"0"+s;

case64:returns;

default:

thrownewIllegalArgumentException("notavalidkey:"+s);
}
}

之上就是依据代码生成获得的实例公钥。

s[64]:024C8E05018319CED4BB04E184C307BFF115976A05F974C7D945B5151E490ADE

所述这一值一般来说是由数字钱包储存的值。

ECDSA公匙

所述转化成获得的密匙的公共性一部分被编号为BTC详细地址。第一步,ECDSA密匙依据椭圆曲线上的点表明。椭圆曲线上面的X和Y座标包含公匙,在开始与“04”联接在一块表明公匙。

ECPublicKeyepub=(ECPublicKey)pub;

ECPointpt=epub.getW();

Stringsx=adjustTo64(pt.getAffineX().toString(16)).toUpperCase();

Stringsy=adjustTo64(pt.getAffineY().toString(16)).toUpperCase();

StringbcPub="04"+sx+sy;

System.out.println("bcPub:"+bcPub);

#prints

bcPub:04CAAA5C0BDDAA22C9D3C0DDAEC8550791891BB2C2FB0F9084D02F927537DE4F443ACED7DEB488E9BFE60D6C68596E6C78D95E20622CC05474FD962392BDC6AF29

实行SHA-256和RIPEMD-160harsh

因而当今务必在公匙上实行SHA-256,以后是RIPEMD-160。

MessageDigestsha=MessageDigest.getInstance("SHA-256");

byte[]s1=sha.digest(bcPub.getBytes("UTF-8"));

System.out.println("sha:"+bytesToHex(s1).toUpperCase());
#prints

sha:7524DC35AEB4B62A0F1C90425ADC6732A7C5DF51A72E8B90983629A7AEC656A0

当今应用BouncyCastle为实行RIPEMD-160出示程序流程,终究JCE并无完成这类优化算法。

MessageDigestrmd=MessageDigest.getInstance("RipeMD160","BC");

byte[]r1=rmd.digest

其次,有必要在哈希开头添加一个0x00的版本字节。

 

   byte[] r2 = new byte[r1.length + 1];

 

   r2[0] = 0;

 

   for (int i = 0 ; i < r1.length ; i++) r2[i+1] = r1[i];

 

   System.out.println(" rmd: " + bytesToHex(r2).toUpperCase());

 

   # prints

 

     rmd: 00C5FAE41AB21FA56CFBAFA3AE7FB5784441D11CEC

 

重复SHA-256哈希2次

 

咱们当前要对上述结果执行2次SHA-256哈希。

 

   byte[] s2 = sha.digest(r2);

 

   System.out.println(" sha: " + bytesToHex(s2).toUpperCase());

 

   byte[] s3 = sha.digest(s2);

 

   System.out.println(" sha: " + bytesToHex(s3).toUpperCase());

 

得出的第2次散列结果的前4个字节用来作为地址校验和。它需要附加到上述的RIPEMD160哈希。得到25字节的BTC地址。

 

   byte[] a1 = new byte[25];

 

   for (int i = 0 ; i < r2.length ; i++) a1[i] = r2[i];

 

   for (int i = 0 ; i < 5 ; i++) a1[20 + i] = s3[i];

 

运用Base58对地址执行编码

 

当前需要运用bitcoinj库内的Base58.encode()方式来从而得到最后的的BTC地址。(此演示文稿的代码仅用于学习,请勿将BTC发送到由该代码生成的BTC地址)

 

   System.out.println(" adr: " + Base58.encode(a1));

 

   # prints

 

     adr: 1K3pg1JFPtW7NvKNA77YCVghZRq2s1LwVF

 

在这篇演示文稿中,可以生成btc地址的流程,即首先生成一个ECDSA密钥对,运用SHA256和RIPEMD160哈希密钥的公共部分。然后,根据执行SHA256 2次并选择前4个字节用来计算校验和,该字节附加到上面的RIPEMD160哈希。结果运用Base58执行编码。

随着数字货币的火热,市面上出现了5000+币种,Bitcoin钱包在币种资产存储、转账、支付等功能上无法满足用户多样化的需求,特别是交易所这种业务型系统,对于钱包功能性、token 支持以及地址管理、余额归集上要求更高,优盾钱包作为全球领先的企业级数字资产管理系统,支持全token,多资产多地址一键归集,实现了国际领先的防内鬼和防黑客技术,深受交易所、商城、游戏项目方的好评。
免责声明
世链财经作为开放的信息发布平台,所有资讯仅代表作者个人观点,与世链财经无关。如文章、图片、音频或视频出现侵权、违规及其他不当言论,请提供相关材料,发送到:2785592653@qq.com。
风险提示:本站所提供的资讯不代表任何投资暗示。投资有风险,入市须谨慎。
世链粉丝群:提供最新热点新闻,空投糖果、红包等福利,微信:juu3644。