登录  /  注册
首页 > web前端 > js教程 > 正文

Node.Js如何实现比特币地址

php中世界最好的语言
发布: 2018-04-27 14:27:38
原创
1897人浏览过

这次给大家带来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中文网其它相关文章!

智能AI问答
PHP中文网智能助手能迅速回答你的编程问题,提供实时的代码和解决方案,帮助你解决各种难题。不仅如此,它还能提供编程资源和学习指导,帮助你快速提升编程技能。无论你是初学者还是专业人士,AI智能助手都能成为你的可靠助手,助力你在编程领域取得更大的成就。
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
关于CSS思维导图的课件在哪? 课件
凡人来自于2024-04-16 10:10:18
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2024 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号