I created an Ethereum wallet through the Ethereum application. I subsequently forgot my password and am now trying to recover it using Pyethrecover. The problem is, the keystore wallet file created within the application (version 3) does not explicitly provide the encrypted seed; something that is required for pyethrecover to work. Is there a way to convert to wallet version 1 without a password? Or is there some other way that I can run Pyethrecover without the encrypted seed?
(Note this is a duplicate of my answers to How to apply pyethrecover.py on v3 .json/transfor v3 .json to .v1 . Reposting here since I don't have enough rep to comment)
I had the same problem. I had created a wallet using geth
and somehow I wrote down the wrong password. I used the simple python
code below to solve the issue. I know it's not pretty, but I just needed a quick solution to my problem. Someone else might pick this up and make a proper tool, or perhaps I get around to it one day as a good python
learning experience. I tested some 100k password and I was able to recover using this code. It follows a similar format as pyethrecover
(the presale tool) and uses pyethereum
to decode the keystore file.
You need to download/install the pyethereum
library: https://github.com/ethereum/pyethereum
See documentation there for requirements and how to.
From pyethereum
we need keys.py
which has the function decode_keystore_json
from keys import decode_keystore_json #keys.py from pyethereum, we only want the decode_keystore_json function
import json
import itertools
import sys
f = open('wallet.json') # the json account file from keystore, here renamed
jsondata=json.load(f)
Run the following if you have a text file with the different passwords you want to try written down, one on each line:
# Reading possible passwords from a text file
with open('listofpasswords.txt') as fpw: # a text file with possible passwords on each line
lines = fpw.read().splitlines()
n_pws = len(lines)
print 'Number of passwords to test: %d' % (n_pws,)
i=1
for l in lines:
try:
decode_keystore_json(jsondata,l)
print '\n*** found password in text file:'
print l
break
except:
sys.stdout.write("\r#%d %s" % (i,l)) #prints simple progress with # in list that is tested and the pw string
sys.stdout.flush()
i+=1
Or this code if you want to construct passwords from possible combinations (see pyethrecover example 2):
# Constructing passwords from possible combinations (see doc of pyethrecover)
grammar=[
('correct',),
('horse','donkey'),
('staple','STAPLE'),
('','battery')
]
pwds=[]
def generate_all(el, tr): #taken from pyethrecover
if el:
for j in xrange(len(el[0])):
for w in generate_all(el[1:], tr + el[0][j]):
yield w
else:
yield tr
pwds = itertools.chain(pwds, generate_all(grammar,''))
pwds_l = list(pwds)
n_pws = len(pwds_l)
print 'Number of passwords to test: %d' % (n_pws,)
i=1
for l in pwds_l:
try:
decode_keystore_json(jsondata,l)
print '\n*** found password in grammar list:'
print l
break
except:
sys.stdout.write("\r#%d %s" % (i,l)) #prints simple progress with # in list that is tested and the pw string
sys.stdout.flush()
i+=1
Good luck!