Wie man durch UTC-Dateien im Schlüsselspeicher privat wird [Duplikat]

Ich erstelle Konten geth account newmit einem Passwort, dann erhalte ich eine UTC-Datei, bei der es sich um eine JSON-Datei handelt, die im Ordner Keystore im Datenverzeichnis gespeichert ist. Jetzt versuche ich, den privaten Schlüssel aus dieser JSON-Datei zu erhalten.

Der Grund, warum ich dies tun möchte, ist, dass ich Metamask un Ubuntu verwende und es ein Problem gibt, das es mir nicht erlaubt, JSON-Dateien direkt in Metamask unter Ubuntu zu importieren.

Weiß jemand, wie man einen privaten Schlüssel über die UTC-json-Datei mit Passwort erhält?

Danke

Antworten (5)

https://www.myetherwallet.com ist eine beliebte Option. Aber ich würde empfehlen, die Offline-Version der Seite herunterzuladen, um die Sicherheit zu erhöhen.

Wenn Sie bereit sind, ein wenig Code zu schreiben, keythereumist dies eine gute Option.

Etwas wie das:

var keyObject = keythereum.importFromFile(address, datadir);
var privateKey = keythereum.recover(password, keyObject);
console.log(privateKey.toString('hex'));
Im Falle von Node.js kann keythereum-node als schnellere Alternative zu verwendet werden keythereum.

2021-12

FYI für Googler, Sie können die UTC-Keystore-Datei mit dem ethkeycli-Tool untersuchen, das gethmit dem Flag --private geliefert wird, um den privaten Schlüssel anzuzeigen

ethkey inspect --private test_chain/keystore/UTC--<file name

Ausgang

Address:       0x...
Public key:    ...
Private key:   ...

Oft wird ein privater Schlüssel benötigt, um Ihr Konto in eine andere Brieftasche zu importieren. Sogar Metamask benötigt einen privaten Schlüssel, um das Konto zu importieren. So konnte ich den privaten Schlüssel von dem Knoten extrahieren, auf dem ich mein Konto erstellt habe. Ethereum-Schlüssel in einem Linux-Knoten werden verschlüsselt und am folgenden Speicherort gespeichert.

~/.ethereum/keystore/ (mainnet)
~/.ethereum/rinkeby/keystore/ (rinkeby testnet)

Wenn Sie die öffentliche Adresse des Kontos und das zum Sperren des Kontos verwendete Passwort haben, sollten Sie in der Lage sein, den privaten Schlüssel zu extrahieren. Ich habe das Web3- Python-Paket verwendet, um den privaten Schlüssel zu extrahieren. Installieren Sie dies mit Pip.

pip install web3

Führen Sie den folgenden Code aus

>>> from web3.auto import w3
>>> with open("~/.ethereum/rinkeby/keystore/UTC--2018-06-
    10T05-43-22.134895238Z--9e63c0d223d9232a4f3076947ad7cff353cc1a28") 
     as keyfile:
...     encrypted_key = keyfile.read()
...     private_key = w3.eth.account.decrypt(encrypted_key, 
                                             'password')

UTC--2018-06-10T05-43-22.134895238Z--9e63c0d223d9232a4f3076947ad7cff353cc1a28 ist die Datei mit dem gespeicherten Schlüssel. Dies gibt einen privaten Schlüssel im Byte-Format zurück.

Sie können den privaten Schlüssel im Hex-Format wie folgt erhalten.

import binascii
binascii.b2a_hex(private_key)

Sie können das web3-CLI- Tool verwenden, um dies einfach zu tun:

web3 account extract --keyfile ~/Downloads/keystore-file --password password
web3-CLI-Installation:curl -LSs https://raw.githubusercontent.com/gochain/web3/master/install.sh | sh

Angenommen, Sie haben den persönlichen rpc Ihres geth aktiviert , um dies programmgesteuert zu tun, ohne den Verzeichnispfad der Keystore-Datei in python fest zu codieren , gehen Sie wie folgt vor:

from web3 import Web3
import eth_keys
from eth_account import account

w3 = Web3(Web3.HTTPProvider('http://127.0.0.1'))
address = '0x...'
password = 'password'

wallets_list = w3.geth.personal.list_wallets()
keyfile_path = (wallets_list[list(i['accounts'][0]['address'] for i in wallets_list).index(address)]['url']).replace("keystore://", "").replace("\\", "/")
keyfile = open(keyfile_path)
keyfile_contents = keyfile.read()
keyfile.close()
private_key = eth_keys.keys.PrivateKey(account.Account.decrypt(keyfile_contents, password))
public_key = private_key.public_key

private_key_str = str(private_key)
public_key_str = str(public_key)
Hallo Rolli! Das Kopieren und Einfügen derselben Antwort auf mehrere Fragen ist nicht sehr hilfreich, wenn die Fragen ähnlich sind. Sie könnten sie als doppelt markieren oder einen Link zu Ihrer Antwort als Kommentar hinzufügen.
Danke @Ismael für den Hinweis. Ich habe fast überall dieselbe Frage gesehen und niemanden gesehen, der sie als Duplikat markiert hat (trotz der großen Anzahl von Ansichten), also dachte ich, dass sie in Ordnung sind. Außerdem sah ich alle Antworten mit Hardcode der Keystore-Datei und dachte, dass meine Antwort nützlicher sein könnte, also entschied ich mich, sie überall zu veröffentlichen. Trotz alledem werde ich prüfen, ob ich das Recht habe, sie als Duplikat zu markieren, und meine Antworten löschen. Nochmals vielen Dank für die Anleitung.
Alles ist gut, Sie müssen nichts tun, tun Sie das in Zukunft einfach nicht. Das System versucht nur, Bots zu erkennen, ich vergewissere mich, dass Sie ein Mensch sind, also ist alles in Ordnung.
Danke @Ismael für die Anleitung. Ich werde mich daran erinnern.