Maison  >  Article  >  interface Web  >  Node.Js génère une adresse Bitcoin (avec code)

Node.Js génère une adresse Bitcoin (avec code)

php中世界最好的语言
php中世界最好的语言original
2018-06-07 10:01:362150parcourir

Cette fois je vous amène du Node.Js pour générer une adresse Bitcoin (avec code). Quelles sont les précautions pour générer une adresse Bitcoin avec Node.Js Voici un cas pratique, jetons un oeil.

En utilisant Node.js, l'IDE utilise 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

Générer une adresse Bitcoin

1. Générez une clé privée aléatoire La clé privée est un nombre de 32 octets. Par exemple :

<🎜. >8F72F6B29E6E225A36B68DFE333C7CE5E55D83249D3D2CD63 32671FA445C4DD3

2. Clé publique de calcul de courbe elliptique Après avoir généré la clé privée, nous utilisons l'algorithme de chiffrement de courbe elliptique (ECDSA-secp256k1) pour calculer la clé publique non compressée correspondant au clé privée La clé publique générée. est 65 octets au total.

0459DEE66AB619C4A9E215D070052D1AE3A2075E5F58C67516B2E4884A88C79BE9A5FA8CCD255FB0A7A75DB985072968C72B036 ED97BA2EF2DECE2ABCA5BE14 792

3. Calculer la valeur de hachage SHA-256 de la clé publique

ae9c74647a8c2f50fd832e397e36dbad05d86db3fe3d959a7c8a07c 1ddda40c6
< 🎜> 🎜>

0005f9d05358aab2a28f19910036e67a7295b14aac

En fait, c'est presque la même chose, qui est l'adresse compressée finalement générée par le code ci-dessus.

Mais dans le Bitcoin réel, la vérification est également ajoutée

6. Calculer la valeur de hachage SHA-256

9f35b0c37977a302512c22f586dd8da4ae1d20399f2ad3f75df23fbc024b4 b2d

7 . Calculez à nouveau la valeur de hachage SHA-256

4b4f9bc87616687957db64efaf4efb2c00d1d93d549a0b70b15812936046d0ac

8. Système hexadécimal à 8 chiffres)

4b4f9bc8

9. Ajoutez ces 4 octets à la fin de l'adresse de compression générée à l'étape 5

0005f9d05358aab2a28f19910036e67a7295b14aac4 b4f9bc8

10. Encoder avec Base58

Base58 se compose de 1 à 9 et de caractères anglais sauf i, l, 0, o. Encodez en base58 le résultat de l'étape précédente et obtenez :

1YbeKoyePe8gxyAYh4E3Qyqb15Nnepmod

Je pense que vous maîtrisez la méthode après avoir lu le cas dans cet article. Pour des informations plus intéressantes, veuillez faire attention aux autres sites Web chinois php Articles connexes !

Lecture recommandée :

Analyse de cas pratique de déduplication de chaînes et de tableaux

Comment express + mock fonctionne dans le parallélisme front et backend Développement

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn