Verwenden von Python: Erstellen Sie einen privaten Schlüssel meiner Wahl und generieren Sie dann einen öffentlichen Schlüssel und eine Adresse

Ich suche eine einfache, einfach zu verwendende Bitcoin-Bibliothek für Python.

Was ich tun möchte, ist zu überprüfen, ob ich einen gewünschten privaten Hex-Schlüssel eingeben und den erwarteten Pubkey im komprimierten Format und die 1Btc ... -Adresse erhalten kann.

Ich habe mir Cryptotools auf Github angesehen, die vielversprechend und einfach zu bedienen aussahen, aber keinen Hex-Wert akzeptierten, der kein Vielfaches von 2 war. Ich weiß, das klingt seltsam, aber ich möchte in der Lage sein, ein Hex einzugeben Wert wie c12 und es funktioniert wie erwartet (es sei denn, ich muss 0c12 eingeben und das funktioniert, wobei die führende Null verworfen wird). Ich erwarte dann, wenn ich 0cfa721d eingebe, dass dies als Big Endian interpretiert wird.

bitcoinlib sieht vielversprechend aus, aber ich finde es verwirrend und ich habe es ein paar Stunden versucht, bin mir aber nicht sicher, wie ich das bekomme, was ich will.

  1. Geben Sie den privaten Schlüssel in Hex ein
  2. Holen Sie sich den Pub-Schlüssel im hash160-Format zurück, komprimiert
  3. Holen Sie sich auch die 1Btc...-Adresse.

Ich frage mich, ob dies eine streng mathematische Beziehung ist. Könnte es beispielsweise eine beliebige oder unendliche Anzahl von öffentlichen Schlüsseln aus dem privaten Schlüssel geben? Gibt es eine Möglichkeit sicherzustellen, dass ich den gewünschten Pubkey aus dem privaten Schlüssel erhalte? Ich möchte bekannte private Schlüssel mit den generierten Pubkey- und BTC-Adressen testen, die bekannten privaten Schlüsseln und Adressen entsprechen, damit ich versuchen kann herauszufinden, wie derjenige, der diese Adressen aus einer Auswahl privater Schlüssel generiert hat, versuchen kann, sie zu replizieren und dasselbe zu tun ich selbst.

Vielen Dank für Hilfe oder Anregungen.

Hallo, Autor von Cryptotools hier. Der Grund, warum es keine ungeraden Hex-Ziffern akzeptiert, ist, dass es den privaten Schlüssel intern als Python-Bytes-Objekt speichert und die bytes.fromhex-Methode volle Bytes erfordert. Ich werde es mir ansehen. Als Problemumgehung können Sie einfach mit einer Null auffüllen, wenn es eine ungerade Anzahl von Ziffern hat. 0x0cfa721d ist genau dasselbe wie 0xcfa721d. Die andere Funktionalität ist da, tun Sie es einfachmyprivatekey.to_public().to_address('P2PKH', compressed=True)

Antworten (1)

Für diesen sehr reduzierten Fall können Sie einen Blick auf https://github.com/circulosmeos/bitcoin-in-tiny-pieces werfen

Jede Operation ist zum leichteren Verständnis codiert und in einer anderen Datei isoliert, aber sie lassen sich einfach verbinden oder direkt von der Befehlszeile aus verwenden: zum Beispiel:

$ echo 0x01 | ./bitcoin-public-from-private.py | ./bitcoin-address-from-public-key.py

Und zur Frage:

Könnte es beispielsweise eine beliebige oder unendliche Anzahl von öffentlichen Schlüsseln aus dem privaten Schlüssel geben?

Aus einem privaten Schlüssel wird im Prinzip nur ein öffentlicher Schlüssel abgeleitet: Dieser kann aber in drei verschiedenen Bitcoin-Adressen verschlüsselt sein . Normalerweise werden nur ein oder zwei dieser Formate verwendet.

Dies ist im einfachsten Fall, ohne Berücksichtigung komplexerer Fälle, die später in Bitcoin eingeführt werden (wie HD-Schlüssel usw.) ...

Danke! Ich habe Ihr Repository unter github.com/jamesyoungdigital/bitcoin-in-tiny-pieces.git gegabelt , um ein neues kleines Tool hinzuzufügen, das die Adresssalden von Brainwallets überprüft. Ich hatte nicht viel Erfolg mit dem Shell-Skript. Es hängt jetzt von meinem Fork von pybitcointools.git ab, der wirklich einfach zu bedienen ist und von fast nichts abhängt. Ich hoffe, euch gefallen die kleinen Ergänzungen! :)
Schön, dass es nützlich war! Was das Shell-Skript betrifft, öffnen Sie einfach ein Problem und ich schaue es mir an: Es würde einwandfrei funktionieren!
Stern gegeben! Ich würde gerne ein paar mehr geben, aber sie lassen mich nicht, haha. :-) Mit dem Shell-Skript versuche ich es so: ./bitcoin-test-address-balance.sh satoshi aber die Ausgabe ist immer: ... 2 .... n und soweit ich das beurteilen kann, endet es nie . Das Problem scheint im Python-Skript für den Adressausgleich in den Zeilen 62 bis 64 zu liegen, wenn eine Ausnahme abgefangen wird. Die URL sollte das {} zur Interpolation verwenden. Bitte beachten Sie meinen Pull-Request. Danke! :-)
Hallo James, ich denke, dass die Ausnahme richtig abgefangen wird: Die Sache ist, dass blockchain.info manchmal die Petition verwirft, wahrscheinlich wegen des hohen Verkehrsaufkommens: In diesem Fall schläft das Skript 1 bis n Minuten zwischen den Wiederholungen: wie es zum Einlaufen getan wird Chargen, dies wird nicht als Problem angesehen :-o aber danke für deinen Zug!