外链吧

 找回密码
 立即注册
查看: 3|回复: 0

bg交易所哥伦布星球 澳洲留学生被绑架要比特币 2020区块链应用

[复制链接]

1万

主题

1万

帖子

118

积分

年度VIP

Rank: 3Rank: 3

积分
118
发表于 2020-9-16 05:50:32 | 显示全部楼层 |阅读模式
网站优化
以比特币为首的加密货币从诞生发展至今融入了多项先进技术区块链技术的应用不仅保障了加密货币的流通便利性更发挥其加密性、不可篡改两大优势赋能于加密货币的交易使之更加安全

区块链钱包的出现更是为加密资产便捷流通的同时增添了一份安全保障区块链钱包指的是利用区块链技术开发的虚拟数字货币产品的管理工具它应具备虚拟币可交易的特点即收付款功能

比特币钱包是基于BTC存在的目的是让BTC存储更加安全聊城新闻有效的避免黑客攻击而且利用比特币钱包中随机生成的比特币地址可以与其他人进行账户上的比特币转账 2019以太坊崩盘

如何生成比特币钱包地址?

Bitcoin地址作为一个随机查找的十六进制字符串在Bitcoin网络中用于发送和接收Bitcoin它属于公私不对称ECDSA密钥的公共部分相对应的私钥用于签署Bitcoin交易作为交易时来自用户的确认和证明 公链与区块链应用

从技术层面理解Bitcoin地址是由ECDSA密钥的公共部分生成的使用SHA-256和RIPEMD-160进行hash如下文演示文稿所述经过处理获取结果hash最终应用Base58校验编码对密钥进行编码

接下来一起了解如何使用JCE(java加密扩展) 以太坊最全历史价格表Bouncy Castle(RIPEMD-160)以及最后在bitcoin库中使用Base58编码功能来完成所有这些工作

生成ECDSA密钥对

BTC使用ECDSA代替RSA作为关键算法生成如下:

为Elliptic Curve算法创建KeyPairGenerator

KeyPairGenerator keyGen = KeyPairGeneratorgetInstance("EC");

利用指定椭圆曲线是secp256k1

ECGenParameterSpec ecSpec = new ECGenParameterSpec("secp256k1");

keyGeninitialize(ecSpec);

只要获取KeyPairGenerator就能创建KeyPair即密钥对从而得到公钥以及私钥

KeyPair kp = keyGengenerateKeyPair();

PublicKey pub = kpgetPublic();

PrivateKey pvt = kpgetPrivate();

ECDSA私钥

开发者能够对密钥的私有部分进行存储毕竟从私钥能够派生出公钥

ECPrivateKey epvt = (ECPrivateKey)pvt;

String sepvt = adjustTo64(epvt 比特币交易网站getS()toString(16))toUpperCase();

Systemoutprintln("s[" + sepvtlength() + "]: " + sepvt);

静态方式adjustTo64()只对包含前导0的十六进制字符串经行填充所以总长度达到64个字符

static private String adjustTo64(String s)

switch(slength())

case 62: return "00" + s;

case 63: return "0" + s;

case 64: return s;

default:

throw new IllegalArgumentException("not a valid key: " + s);

以上便是根据代码生成获取的示例私钥

s[64]: 024C8E05018319CED4BB04E184C307BFF115976A05F974C7D945B5151E490ADE

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

ECDSA公钥

上述生成得到的密钥的公共部分被编码为BTC地址第一步ECDSA密钥根据椭圆曲线上的点表示椭圆曲线上点的X和Y坐标包括公钥在开头与“04”连接在一块表示公钥

ECPublicKey epub = (ECPublicKey)pub;

ECPoint pt = epubgetW();

String sx = adjustTo64(ptgetAffineX()toString(16))toUpperCase();

String sy = adjustTo64(ptgetAffineY()toString(16))toUpperCase();

String bcPub = "04" + sx + sy;

Systemoutprintln("bcPub: " + bcPub);

# prints

bcPub: 04CAAA5C0BDDAA22C9D3C0DDAEC8550791891BB2C2FB0F9084D02F927537DE4F443ACED7DEB488E9BFE60D6C68596E6C78D95E20622CC05474FD962392BDC6AF29

执行SHA-256和RIPEMD-160 harsh

因此当前必须在公钥上执行SHA-256之后是RIPEMD-160

MessageDigest sha = MessageDigestgetInstance("SHA-256");

byte[] s1 = shadigest(bcPubgetBytes("UTF-8"));

Systemoutprintln("sha: " + bytesToHex(s1)toUpperCase());

# prints

sha: 7524DC35AEB4B62A0F1C90425ADC6732A7C5DF51A72E8B90983629A7AEC656A0

当前运用Bouncy Castle为执行RIPEMD-160提供程序毕竟JCE并无实现这种算法

MessageDigest rmd = MessageDigestgetInstance("RipeMD160" "BC");

byte[] r1 = rmddigest(s1);

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

byte[] r2 = new byte[r1length + 1];

r2[0] = 0;

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

Systemoutprintln("rmd: " + bytesToHex(r2)toUpperCas




上一篇:链路聚合是什么 比特币可怕 trx与eos数字货币的未来
下一篇:eth众筹时间 区块链对政府 比特币升值的多少倍
回复

使用道具 举报

会员充值
正规网站优化群

外链吧
  • 外链吧
  • 豫ICP备17032527号-5
  • 手机版
  • 小黑屋
  • 外链吧
  • QQ Online
快速回复 返回顶部 返回列表