>웹 프론트엔드 >JS 튜토리얼 >Node.Js에서 비트코인 ​​주소를 구현하는 방법

Node.Js에서 비트코인 ​​주소를 구현하는 방법

php中世界最好的语言
php中世界最好的语言원래의
2018-04-27 14:27:382215검색

이번에는 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)) //<-- 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바이트 숫자입니다. 예:

8F72F6B29E6E225A36B68DFE333C7CE5E55D83249D3D2CD6332671FA445C4 DD3

2. 타원곡선 계산 공개키가 생성된 후, 우리는 타원 곡선 암호화 알고리즘(ECDSA-secp256k1)을 사용하여 개인 키에 해당하는 압축되지 않은 공개 키를 계산합니다. 첫 번째 바이트는 0x04이고 마지막 32바이트는 X 좌표입니다. 32바이트는 Y 좌표입니다: 공개 키 P. 97BA2EF2DECE2ABCA5BE14792

공개 키:

0459DEE66AB619C4A9E215D070052D1AE3A2075E5F58C67516B2E4884A88C79BE 9A5FA8CCD255FB0A7A 75DB985072968C72B036ED97BA2EF2DECE2ABCA5BE14792

3 공개 키

ae9c74647a8c2f50fd832e397e3의 SHA -256 해시 값을 계산합니다. 6dbad05d86db3fe3d959a7c 8a07c1ddda40c6

4 계산합니다. RIPEMD-160 해시값

05f9d05358aab2a28f19910036e67a7295b14aac

5 주소 버전 번호 추가(비트코인 메인넷 0x00)

0005f9d05358aab2a28f 1 9910036e67a7295b14aac

사실 거의 똑같습니다. 위에서 최종적으로 생성된 압축주소입니다. 암호.

하지만 실제 비트코인에는 검증도 추가됩니다

6. SHA-256 해시값 계산

9f35b0c37977a302512c22f586dd8da4ae1d20399f2ad3f75df23fbc024b4b2d

7. SHA-256 해시 값을 다시 계산합니다

4b4f9bc87616687957db64efaf4efb2c00d1d93d549a0b70b15812936046d0ac

8. 첫 번째 4를 가져옵니다. 이전 단계 결과의 바이트(8자리 16진수)

4b4f9bc8

9. 다섯 번째 단계에서 생성된 압축 주소 끝에 이 4바이트를 추가합니다.

0005f9d05358aab2a28f19910036e67a7295b14aac 4b 4f9bc8

10. with Base58

Base58은 i, l, 0, o를 제외한 1~9의 영문자로 구성됩니다. Base58은 이전 단계의 결과를 인코딩하고 다음을 얻습니다.

1YbeKoyePe8gxyAYh4E3Qyqb15Nnepmod

이 기사의 사례를 읽은 후 방법을 마스터했다고 생각합니다. 더 흥미로운 정보를 보려면 PHP 중국어 웹사이트의 다른 관련 기사에 주목하세요. !

추천 도서:

vue-cli 프로젝트에서 부트스트랩을 사용하는 단계에 대한 자세한 설명

AngularJs가 XSS 공격을 방지하는 방법


AngularJS에서 필터 사용자 정의 필터를 사용하는 사례에 대한 자세한 설명

위 내용은 Node.Js에서 비트코인 ​​주소를 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.