Creo cuentas geth account new
con una contraseña, luego obtengo un archivo UTC que es un archivo json guardado en el almacén de claves de la carpeta en el directorio de datos. Ahora intento obtener la clave privada de este archivo json.
La razón por la que quiero hacer esto es porque estoy usando metamask en ubuntu y hay un problema que no me permite importar el archivo json directamente a metamask en ubuntu.
¿Alguien sabe cómo obtener una clave privada a través del archivo UTC json con contraseña?
Gracias
https://www.myetherwallet.com es una opción popular. Pero recomendaría descargar la versión sin conexión del sitio para mayor seguridad.
Si te apetece escribir un poco de código, keythereum
es una buena opción.
Algo como esto:
var keyObject = keythereum.importFromFile(address, datadir);
var privateKey = keythereum.recover(password, keyObject);
console.log(privateKey.toString('hex'));
2021-12
FYI para Googlers, puede inspeccionar el archivo de almacén de claves UTC con la ethkey
herramienta cli que viene con geth
el indicador --private para mostrar la clave privada
ethkey inspect --private test_chain/keystore/UTC--<file name
producción
Address: 0x...
Public key: ...
Private key: ...
A menudo se requiere una clave privada para importar su cuenta en una billetera diferente. Incluso Metamask necesita una clave privada para importar la cuenta. Así fue como pude extraer la clave privada del nodo donde creé mi cuenta. Las claves de Ethereum en un nodo de Linux se cifrarán y almacenarán en la siguiente ubicación.
~/.ethereum/keystore/ (mainnet)
~/.ethereum/rinkeby/keystore/ (rinkeby testnet)
Si tiene la dirección pública de la cuenta y la contraseña utilizada para bloquear la cuenta, debería poder extraer la clave privada. Usé el paquete web3 python para extraer la clave privada. Instale esto usando pip.
pip install web3
Ejecuta el siguiente código
>>> 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 es el archivo que contiene la clave almacenada. Esto devolverá una clave privada en formato de byte.
Puede obtener la clave privada en formato hexadecimal de la siguiente manera.
import binascii
binascii.b2a_hex(private_key)
Puede usar la herramienta web3 CLI para hacer esto fácilmente:
web3 account extract --keyfile ~/Downloads/keystore-file --password password
curl -LSs https://raw.githubusercontent.com/gochain/web3/master/install.sh | sh
Suponiendo que ha activado el rpc personal de su geth , para hacer esto programáticamente sin codificar la ruta del directorio del archivo del almacén de claves en python , haga lo siguiente:
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)
oxidado
keythereum
.