>  기사  >  웹 프론트엔드  >  Node.Js가 비트코인 ​​주소 생성(코드 포함)

Node.Js가 비트코인 ​​주소 생성(코드 포함)

php中世界最好的语言
php中世界最好的语言원래의
2018-06-07 10:01:362150검색

이번에는 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)은 개인 키에 해당하는 압축되지 않은 공개 키를 계산합니다. 생성된 공개 키는 총 65바이트이며, 마지막 32바이트는 X 좌표입니다. 32바이트는 Y 좌표입니다: 공개 키 P. 97BA2EF2DECE2ABCA5BE14792

공개 키:

0459DEE66AB619C4A9E215D1AE3A2075E5F58C67516B2E4884A88C79 BE9A5FA8CCD255FB0A7A 75DB985072968C72B036ED97BA2EF2DECE2ABCA5BE14792

3 공개 키

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

4. RIPEMD-160 해시 값을 계산하세요

05f9d05358aab2a28f19910036e67a7295b14aac

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

0005f9d05358aab2a 28f1 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 중국어 웹사이트의 다른 관련 기사에 주목하세요. !

추천 도서:

문자열 + 배열 중복 제거 실제 사례 분석


express + mock 프런트엔드 및 백엔드 병렬 개발 운영 방법

위 내용은 Node.Js가 비트코인 ​​주소 생성(코드 포함)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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