Heim >Web-Frontend >js-Tutorial >Node.Js generiert Bitcoin-Adresse (mit Code)

Node.Js generiert Bitcoin-Adresse (mit Code)

php中世界最好的语言
php中世界最好的语言Original
2018-06-07 10:01:362465Durchsuche

Dieses Mal bringe ich Ihnen Node.Js zum Generieren einer Bitcoin-Adresse (mit Code). Was sind die Vorsichtsmaßnahmen zum Generieren einer Bitcoin-Adresse mit Node.Js? Hier ist ein praktischer Fall, schauen wir uns das an.

Mit Node.js verwendet die 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

Bitcoin-Adresse generieren

1. Der private Schlüssel ist eine 32-Byte-Zahl CD63326 71FA445C4DD3

2. Öffentlicher Schlüssel zur Berechnung der elliptischen Kurve Nach der Generierung des privaten Schlüssels verwenden wir den Verschlüsselungsalgorithmus für elliptische Kurven (ECDSA-secp256k1), um den unkomprimierten öffentlichen Schlüssel zu berechnen, der dem privaten Schlüssel entspricht Bytes insgesamt. Erstes Das erste Byte ist 0x04, die letzten 32 Bytes sind die X-Koordinate und die letzten 32 Bytes sind die Y-Koordinate: Öffentlicher Schlüssel P. 255FB0A7A75DB985072968C72B036ED97BA2EF2DECE2ABCA5BE14792

Öffentlicher Schlüssel:

0459DEE66AB619C4A9E215D070052D1AE3A2075E5F58C67516B2E4884A88C79BE9A5FA8CCD255FB0A7A75DB985072968C72B036ED97BA2. EF2DECE2ABCA5BE14 792

3. Berechnen Sie den SHA-256-Hashwert des öffentlichen Schlüssels

ae9c74647a8c2f50fd832e397e36dbad05d86db3fe3d959a7c8a07c1ddda40 c6

4. Berechnen Sie den RIPEMD-160-Hash-Wert

05f9d05358aab2a28f19910036e67a7295b14aac

5. Fügen Sie die Adressversionsnummer (Bitcoin-Mainnet 0x00) hinzu

0005f9d05358aab2a28f19910036e67a7295b14aac

Tatsächlich ist dies fast dasselbe, nämlich die komprimierte Adresse, die schließlich durch den obigen Code generiert wird.

Aber im tatsächlichen Bitcoin wird auch die Verifizierung hinzugefügt

6. Berechnen Sie den SHA-256-Hash-Wert

9f35b0c37977a302512c22f586dd8da4ae1d20399f2ad3f75df23fbc024b4 b2d

7 . Berechnen Sie den SHA-256-Hash-Wert erneut (8-stelliges Hexadezimalsystem)

4b4f9bc8

9. Fügen Sie diese 4 Bytes am Ende der in Schritt 5 generierten Komprimierungsadresse hinzu

0005f9d05358aab2a28f19910036e67a7295b14aac4 b4f9bc8

10. Mit Base58 kodieren

Base58 besteht aus 1-9 und englischen Zeichen außer i, l, 0, o. Base58 kodiert das Ergebnis des vorherigen Schritts und erhält:

1YbeKoyePe8gxyAYh4E3Qyqb15Nnepmod

Ich glaube, Sie haben die Methode beherrscht, nachdem Sie den Fall in diesem Artikel gelesen haben. Bitte achten Sie auf andere chinesische PHP-Websites. Verwandte Artikel!

Empfohlene Lektüre:

Praktische Fallanalyse der String- und Array-Deduplizierung

Wie Express + Mock die Front- und Backend-Parallelitätsentwicklung betreibt

Das obige ist der detaillierte Inhalt vonNode.Js generiert Bitcoin-Adresse (mit Code). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn