import argparse
parser = argparse.ArgumentParser()
parser.add_argument("key", help="base58 key, for example LtVAmzT7NwqNHxVDpVkhE94oYwQ4ZmEc6s2HkbmCfj59tpzfgBpu")
parser.add_argument("count", help="count symbols for change 2", type=int)
args = parser.parse_args()
print("Params:")
print(args.key)
print(args.count)
bad_key = args.key
bad_symbols_count = args.count
key_len = 52
if len(bad_key) != key_len:
print("Key length is wrong!!")
exit()
for i in range(key_len):
if bad_key[i] not in base58.alphabet:
print("Warrning! Symbol", bad_key[i], 'pos', i, 'not base58' )
def check(key, start, level):
for i in range(start, key_len):
if level != 0:
print(' ' * (5 - level), i, '/', key_len, '--', level + 1)
for l in base58.alphabet:
test = key[:i] + l + key[i+1:]
if level == 0:
try:
base58.b58decode_check(test)
except ValueError:
continue
print('Found: ' + test)
return True
elif check(test, i + 1, level - 1):
return True
if not check(bad_key, 1, bad_symbols_count - 1):
print('NOT found')
Хороший скрипт. Рабочий.
Нужно добавить, что для работы надо сделать
sudo pip install base58
Ну и полный перебор трех символов по моим оценкам займет примерно 100 часов. Перебор четырех символов - практически нереально... Хотя если написать многопоточный аналог на с++, то можно замутить пул и компов 10 найдут ключ в приемлемое время ))