Node.Js生成比特币地址代码解析

 更新时间:2018年04月21日 09:11:02   投稿:laozhang   我要评论
本篇文章给大家分享了关于用NODE.JS生成比特币地址的相关代码,对此有兴趣的读者们可以参考测试下。

使用Node.js,IDE采用sublime 3。

var randomBytes = require('randombytes')
var BigInteger = require('bigi')
var ecurve = require('ecurve')
var crypto = require('crypto')
var cs = require('coinstring')
var secp256k1 = ecurve.getCurveByName('secp256k1')
var randombytes = randomBytes(32).toString('hex')
var privateKey = new Buffer(randombytes, 'hex')
console.log("私钥:" + privateKey.toString('hex'))
var ecparams = ecurve.getCurveByName('secp256k1')
var curvePt = ecparams.G.multiply(BigInteger.fromBuffer(privateKey))
var x = curvePt.affineX.toBuffer(32)
var y = curvePt.affineY.toBuffer(32)
var publicKey = Buffer.concat([new Buffer([0x04]), x, y])
console.log("标准地址:" + publicKey.toString('hex'))

//compressed
publicKey = curvePt.getEncoded(true) //true forces compressed public key
console.log("compressed:" + publicKey.toString('hex'))

var sha = crypto.createHash('sha256').update(publicKey).digest()
var pubkeyHash = crypto.createHash('rmd160').update(sha).digest()
// pubkeyHash of compressed public key
console.log("pubkeyHash:" + pubkeyHash.toString('hex')) 

// address of compressed public key
console.log("压缩地址:" + cs.encode(pubkeyHash, 0x0)) //<-- 0x0 is for public addresses
//这里还缺失校验和Base58编码
console.log(cs.encode(privateKey, 0x80)) //<--- 0x80 is for private addresses

console.log(cs.encode(Buffer.concat([privateKey, new Buffer([0])]), 0x80)) // <-- compressed private address

生成比特币地址

1.生成随机私钥,私钥是一个32字节的数 例如:

8F72F6B29E6E225A36B68DFE333C7CE5E55D83249D3D2CD6332671FA445C4DD3

2.椭圆曲线计算公钥 生成了私钥之后,我们使用椭圆曲线加密算法(ECDSA-secp256k1)计算私钥所对应的非压缩公钥,生成的公钥共65字节, 第一个字节是0x04,后32个字节是X坐标,32个字节是Y坐标: 公钥P.X:

59DEE66AB619C4A9E215D070052D1AE3A2075E5F58C67516B2E4884A88C79BE9 公钥P.Y: A5FA8CCD255FB0A7A75DB985072968C72B036ED97BA2EF2DECE2ABCA5BE14792

公钥:

0459DEE66AB619C4A9E215D070052D1AE3A2075E5F58C67516B2E4884A88C79BE9A5FA8CCD255FB0A7A75DB985072968C72B036ED97BA2EF2DECE2ABCA5BE14792

3.计算公钥的SHA-256哈希值

ae9c74647a8c2f50fd832e397e36dbad05d86db3fe3d959a7c8a07c1ddda40c6

4.计算 RIPEMD-160哈希值

05f9d05358aab2a28f19910036e67a7295b14aac

5.加入地址版本号(比特币主网 0x00)

0005f9d05358aab2a28f19910036e67a7295b14aac

其实这里就差不多了,也就是上面代码最后生成的压缩地址。

但在实际比特币中,还要加上校验

6.计算 SHA-256 哈希值

9f35b0c37977a302512c22f586dd8da4ae1d20399f2ad3f75df23fbc024b4b2d

7.再次计算 SHA-256 哈希值

4b4f9bc87616687957db64efaf4efb2c00d1d93d549a0b70b15812936046d0ac

8.取上一步结果的前4个字节(8位十六进制)

4b4f9bc8

9.把这4个字节加到第五步生成的压缩地址后边

0005f9d05358aab2a28f19910036e67a7295b14aac4b4f9bc8

10.用Base58编码

Base58由1-9和除i,l,0,o之外的英文字符组成。 对上一步的结果进行Base58编码,得到:

1YbeKoyePe8gxyAYh4E3Qyqb15Nnepmod

这就是我们经常看到的传统意义上的比特币钱包地址了。

相关文章

  • nodejs微信开发之授权登录+获取用户信息

    nodejs微信开发之授权登录+获取用户信息

    这篇文章主要介绍了nodejs微信开发之授权登录+获取用户信息,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-03-03
  • Node.JS段点续传:Nginx配置文件分段下载功能的实现方法

    Node.JS段点续传:Nginx配置文件分段下载功能的实现方法

    在Node.JS中可以配置这个标签来实现文件的分段下载。这篇文章给大家介绍了Node.JS段点续传:Nginx配置文件分段下载功能的实现方法,需要的朋友参考下吧
    2018-03-03
  • 用node开发并发布一个cli工具的方法步骤

    用node开发并发布一个cli工具的方法步骤

    这篇文章主要介绍了用node开发并发布一个cli工具的方法步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • nodeJS微信分享

    nodeJS微信分享

    这篇文章主要为大家详细介绍了nodeJS微信分享的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • 解决koa2 ctx.render is not a function报错问题

    解决koa2 ctx.render is not a function报错问题

    这篇文章主要介绍了解决koa2 ctx.render is not a function报错问题,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • node.js的http.createServer过程深入解析

    node.js的http.createServer过程深入解析

    这篇文章主要给大家介绍了关于node.js的http.createServer过程的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用node.js具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-06-06
  • node.js中的http.response.setHeader方法使用说明

    node.js中的http.response.setHeader方法使用说明

    这篇文章主要介绍了node.js中的http.response.setHeader方法使用说明,本文介绍了http.response.setHeader的方法说明、语法、接收参数、使用实例和实现源码,需要的朋友可以参考下
    2014-12-12
  • nodejs的安装使用与npm的介绍

    nodejs的安装使用与npm的介绍

    Node.js是一个Javascript运行环境(runtime environment),发布于2009年5月,由Ryan Dahl开发,实质是对Chrome V8引擎进行了封装。本文详细介绍了Node.js的安装和使用,需要的朋友可以参考下
    2019-09-09
  • 基于Node.js模板引擎教程-jade速学与实战1

    基于Node.js模板引擎教程-jade速学与实战1

    下面小编就为大家带来一篇基于Node.js模板引擎教程-jade速学与实战1。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • 详解使用 Node.js 开发简单的脚手架工具

    详解使用 Node.js 开发简单的脚手架工具

    这篇文章主要介绍了详解使用 Node.js 开发简单的脚手架工具,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06

最新评论