Ich erstelle Konten geth account new
mit 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
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, keythereum
ist dies eine gute Option.
Etwas wie das:
var keyObject = keythereum.importFromFile(address, datadir);
var privateKey = keythereum.recover(password, keyObject);
console.log(privateKey.toString('hex'));
2021-12
FYI für Googler, Sie können die UTC-Keystore-Datei mit dem ethkey
cli-Tool untersuchen, das geth
mit 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
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)
rostig
keythereum
.