这次给大家带来Node.Js如何实现比特币地址,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)) //<p style="text-align: left;"><strong>生成比特币地址</strong></p><p style="text-align: left;">1.生成随机私钥,私钥是一个32字节的数 例如:</p><p style="text-align: left;">8F72F6B29E6E225A36B68DFE333C7CE5E55D83249D3D2CD6332671FA445C4DD3</p><p style="text-align: left;">2.椭圆曲线计算公钥 生成了私钥之后,我们使用椭圆曲线加密算法(ECDSA-secp256k1)计算私钥所对应的非压缩公钥,生成的公钥共65字节, 第一个字节是0x04,后32个字节是X坐标,32个字节是Y坐标: 公钥P.X:</p><blockquote style="text-align: left;"><p style="text-align: left;">59DEE66AB619C4A9E215D070052D1AE3A2075E5F58C67516B2E4884A88C79BE9 公钥P.Y: A5FA8CCD255FB0A7A75DB985072968C72B036ED97BA2EF2DECE2ABCA5BE14792</p></blockquote><p style="text-align: left;">公钥:</p><blockquote style="text-align: left;"><p style="text-align: left;">0459DEE66AB619C4A9E215D070052D1AE3A2075E5F58C67516B2E4884A88C79BE9A5FA8CCD255FB0A7A75DB985072968C72B036ED97BA2EF2DECE2ABCA5BE14792</p></blockquote><p style="text-align: left;">3.计算公钥的SHA-256哈希值</p><blockquote style="text-align: left;"><p style="text-align: left;">ae9c74647a8c2f50fd832e397e36dbad05d86db3fe3d959a7c8a07c1ddda40c6</p></blockquote><p style="text-align: left;">4.计算 RIPEMD-160哈希值</p><blockquote style="text-align: left;"><p style="text-align: left;">05f9d05358aab2a28f19910036e67a7295b14aac</p></blockquote><p style="text-align: left;">5.加入地址版本号(比特币主网 0x00)</p><blockquote style="text-align: left;"><p style="text-align: left;">0005f9d05358aab2a28f19910036e67a7295b14aac</p></blockquote><p style="text-align: left;">其实这里就差不多了,也就是上面代码最后生成的压缩地址。</p><p style="text-align: left;">但在实际比特币中,还要加上校验</p><p style="text-align: left;">6.计算 SHA-256 哈希值</p><blockquote style="text-align: left;"><p style="text-align: left;">9f35b0c37977a302512c22f586dd8da4ae1d20399f2ad3f75df23fbc024b4b2d</p></blockquote><p style="text-align: left;">7.再次计算 SHA-256 哈希值</p><blockquote style="text-align: left;"><p style="text-align: left;">4b4f9bc87616687957db64efaf4efb2c00d1d93d549a0b70b15812936046d0ac</p></blockquote><p style="text-align: left;">8.取上一步结果的前4个字节(8位十六进制)</p><blockquote style="text-align: left;"><p style="text-align: left;">4b4f9bc8</p></blockquote><p style="text-align: left;">9.把这4个字节加到第五步生成的压缩地址后边</p><blockquote style="text-align: left;"><p style="text-align: left;">0005f9d05358aab2a28f19910036e67a7295b14aac4b4f9bc8</p></blockquote><p style="text-align: left;">10.用Base58编码</p><p style="text-align: left;">Base58由1-9和除i,l,0,o之外的英文字符组成。 对上一步的结果进行Base58编码,得到:</p><blockquote style="text-align: left;"><p style="text-align: left;">1YbeKoyePe8gxyAYh4E3Qyqb15Nnepmod</p></blockquote><p>相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!</p><p>推荐阅读:</p><p><a href="http://www.php.cn/js-tutorial-394547.html" target="_blank">vue-cli项目中使用bootstrap步骤详解</a></p><p style="text-align: left;"><a href="http://www.php.cn/js-tutorial-394541.html" target="_blank">AngularJs如何防止XSS攻击</a><br></p><p style="text-align: left;"><a href="http://www.php.cn/js-tutorial-394537.html" target="_blank">AngularJS使用Filter自定义过滤器案列详解</a><br></p>
以上就是Node.Js如何实现比特币地址的详细内容,更多请关注php中文网其它相关文章!
Copyright 2014-2024 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号