Author

Topic: Вопрос. Изменение приватного ключа. (Read 575 times)

kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
Скрипт для подбора написал, может кому еще пригодится

Code:
import base58

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

 Smiley

Ну и полный перебор трех символов по моим оценкам займет примерно 100 часов. Перебор четырех символов - практически нереально... Хотя если написать многопоточный аналог на с++, то можно замутить пул и компов 10 найдут ключ в приемлемое время ))
sr. member
Activity: 245
Merit: 254
Скрипт для подбора написал, может кому еще пригодится

Code:
import base58

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')
sr. member
Activity: 245
Merit: 254
за 0.03 BTC готов написать скрипт для подбора, там к томуже бткоин кеш с этого адреса можно получить
legendary
Activity: 2044
Merit: 1231
Ну если найти способ проверки валидости

Ключи и адреса принято записывать в формате Base58Check.
Это формат с контрольной суммой - он сам себя контролирует на предмет целостности. Для валидации необходимо нарыть подходящую либу или самому реализовать алгоритм проверки. 

Ну вот как раз всё, что на этом приватном ключе есть, а именно:

не много. Но за подсказку в решении проблемы готов отблагодарить

и пойдёт на благодарность программисту. Хотя есть энтузиасты, которые любят бесплатно работать, но их мало (быстро умнеют). А вообще странный вопрос. Я бы не советовал таким способом защищать ключи.
legendary
Activity: 2317
Merit: 2318
Ну если найти способ проверки валидости

Ключи и адреса принято записывать в формате Base58Check.
Это формат с контрольной суммой - он сам себя контролирует на предмет целостности. Для валидации необходимо нарыть подходящую либу или самому реализовать алгоритм проверки. 
hero member
Activity: 980
Merit: 505
Ну если только пару-тройку символов поперебирать - думаю есть шансы. Много биткоинTов-то хоть было?

Это если знать, какую именно пару-тройку символов перебирать.

Перебрать один символ 58*52 = 3016 вариантов
Перебрать два символа 58*58*51 = 171 564 вариантов
Перебрать три символа 58*58*58*50 = 9 755 600 вариантов

Средненький комп переберет секунды за три я думаю.

Ну если найти способ проверки валидости или быстрого импортирования приватного ключа с ресканом - тогда да. Или все 9 755 600 сразу импортировать, правда не знаю, сколько такой рескан будет идти.
kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
Ну если только пару-тройку символов поперебирать - думаю есть шансы. Много биткоинTов-то хоть было?

Это если знать, какую именно пару-тройку символов перебирать.

Перебрать один символ 58*52 = 3016 вариантов
Перебрать два символа 58*58*51 = 171 564 вариантов
Перебрать три символа 58*58*58*50 = 9 755 600 вариантов

Средненький комп переберет секунды за три я думаю.
hero member
Activity: 952
Merit: 518
Ну если только пару-тройку символов поперебирать - думаю есть шансы. Много биткоинTов-то хоть было?

Это если знать, какую именно пару-тройку символов перебирать.
newbie
Activity: 13
Merit: 0
Ну если только пару-тройку символов поперебирать - думаю есть шансы. Много биткоинTов-то хоть было?
Нет не много. Но за подсказку в решении проблемы готов отблагодарить.  Вопрос в том возможно ли восстановить доступ зная 90% при ключа.
kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
Ну если только пару-тройку символов поперебирать - думаю есть шансы. Много биткоинTов-то хоть было?
newbie
Activity: 13
Merit: 0
Ситуация такая. Был сохранен приватный ключ к кошельку биткоинт. Для большей надежности изменил несколько символов в ключе. И благополучно забыл про этот кошелек. Сейчас нашел этот прив. ключ но проблема в том, что уже не помню какие символы и на что изменял. Все о кошельке можно забыть? Или есть какой либо способ подобрать? Ключ стандартный 52 символ формат WIF Compressed как понимаю.
Jump to: