Wie kann ich eine Brieftasche in Python generieren?

Ich versuche, ein Python-Skript zu schreiben, das eine neue Brieftasche für diesen Benutzer generieren kann, aber ich muss in der Lage sein, den privaten Schlüssel zu behalten.

Ich habe folgendes befolgt: Stapelüberlaufantwort
und habe diese Ergebnisse erhalten:

import os
from ethereum import utils
key = utils.sha3(os.urandom(4096))
print key
Out[5]: 'L\xf7\x98\x06\xb9\xbe>?
c\x88\xd3\xa7\x05\xdd\xe8AtNe\xf3\xe7Pc\xed\xd8L~\\\xcc\rq\x18'
raw = utils.privtoaddr(key)
print raw
Out[7]: 
'n\x98V8\x05\xa1\x05\x9b\x18\xca%\xb3\xed\xd0\xd5\xa9I\xf8\x97\x15'
add = utils.checksum_encode(raw)
print add
Out[9]: '0x6e98563805A1059B18ca25B3edd0d5a949f89715'

Ich konnte also eine Adresse bekommen, aber ich bin mir nicht ganz sicher, was ich hier in den Variablen "Schlüssel" und "Raw" sehe

Os ist Ubuntu 16.4, auf dem Python 2.7.12 ausgeführt wird.
Beachten Sie, dass dies ein kleines persönliches Projekt zum Lernen ist, daher stören mich "Sicherheitsprobleme" nicht wirklich

Bearbeiten: Ich konnte damit erstellen, was ich brauchte, ich werde diese Frage offen lassen, da ich immer noch an meinem ersten Weg interessiert bin. https://github.com/vkobel/ethereum-generate-wallet

Antworten (1)

Es sieht so aus, als wären Sie in Python 2. Py2 repräsentiert Bytes in einer latin-1-codierten Zeichenfolge. Manchmal sehen Sie ASCII-Zeichen, manchmal sehen Sie so etwas wie \x18das Byte 00011000, auch bekannt als 18 in Hex oder 24 als Ganzzahl. Ein privater Schlüssel ist nur eine Reihe von Bytes hintereinander.

rawist die binäre Darstellung der Adresse. Die Adresse in addrist die Hex-String-Darstellung (mit in EIP-55 definierter Prüfsumme ). Beachten Sie die Endung der Adresse: , was in 15entspricht .\x15addr


Sie könnten auch an web3.py v4-Funktionen für die Verwaltung privater Schlüssel interessiert sein: http://web3py.readthedocs.io/en/latest/web3.eth.account.html

Es sieht aus wie:

>>> from web3.auto import w3
>>> acct = w3.eth.account.create('KEYSMASH FJAFJKLDSKF7JKFDJ 1530')
>>> acct.address
'0x5ce9454909639D2D17A3F753ce7d93fa0b9aB12E'
>>> acct.privateKey
b"\xb2\\}\xb3\x1f\xee\xd9\x12''\xbf\t9\xdcv\x9a\x96VK-\xe4\xc4rm\x03[6\xec\xf1\xe5\xb3d"

Wenn Sie die Hex-Codierung des privaten Schlüssels sehen möchten, können Sie Folgendes verwenden:

>>> acct.privateKey.hex()
'b25c7db31feed9122727bf0939dc769a96564b2de4c4726d035b36ecf1e5b364'
Vielen Dank für die Erklärung. Jetzt kann ich also den "tatsächlichen" privaten Schlüssel mit .encode('hex') in der Zeichenfolge sehen :)
Nun, wir sind uns nicht einig darüber, was „tatsächlich“ in Bezug auf den privaten Schlüssel bedeutet. :) Ich denke, die native Byte-Darstellung ist die natürlichste Darstellung. Ich werde jedoch eine zusätzliche Anmerkung für Leute hinzufügen, die die Hex-Version wollen.