Jump to content

Не могу создать private key самостоятельно


Recommended Posts

Posted

Добрый день.

Пытаюсь создать приватный ключ для bitcoin из хэша числа и не получается. Пользуюсь алгоритмом описанным в https://en.bitcoin.it/wiki/Wallet_import_format

Однако при хэшировании hex числа описанного в примере у меня получается другой результат.

В чем может быть причина?

Posted
def priv2WIF(h, compressed = False, testnet = False):
    #uncompressed: 0x80 + [32-byte secret] + [4 bytes of Hash() of previous 33 bytes], base58 encoded
    #compressed: 0x80 + [32-byte secret] + 0x01 + [4 bytes of Hash() previous 34 bytes], base58 encoded
    prefix = b'\x80'
    if testnet:
        prefix = b'\xef'
    h = prefix + h
    if compressed: h += b'\x01'
    h += hashlib.sha256(hashlib.sha256(h).digest()).digest()[:4]
    return encode_base58(h)

https://github.com/bitaps-com/pybtc/blob/master/pybtc/tools.py#L140

Хеш надо брать не от HEX а от байтовой строки

Posted
22 минуты назад, 4_tochka сказал:

def priv2WIF(h, compressed = False, testnet = False):
    #uncompressed: 0x80 + [32-byte secret] + [4 bytes of Hash() of previous 33 bytes], base58 encoded
    #compressed: 0x80 + [32-byte secret] + 0x01 + [4 bytes of Hash() previous 34 bytes], base58 encoded
    prefix = b'\x80'
    if testnet:
        prefix = b'\xef'
    h = prefix + h
    if compressed: h += b'\x01'
    h += hashlib.sha256(hashlib.sha256(h).digest()).digest()[:4]
    return encode_base58(h)

https://github.com/bitaps-com/pybtc/blob/master/pybtc/tools.py#L140

Хеш надо брать не от HEX а от байтовой строки

 

Я правильно понял, что прежде чем начать первое хэширование, необходимо hex перевести в байтовую строку и так каждый раз? Дело в том, что данная операция почему то ни где не описана

Posted

Все операции производятся над байтовыми строками. HEX это всего лишь способ как отобразить промежуточный результат в читабельном виде. Если у вас приватный ключ в HEX то его следует привести к байтовой строке перед дальнейшими операциями.

Posted
59 минут назад, 4_tochka сказал:

Все операции производятся над байтовыми строками. HEX это всего лишь способ как отобразить промежуточный результат в читабельном виде. Если у вас приватный ключ в HEX то его следует привести к байтовой строке перед дальнейшими операциями.

Я, возможно, задам дурацкий вопрос, но для каких целей это реализовано таким образом? т.е. работа происходит со строками байтов, на не с готовым числом? Ведь проверка контрольной суммы происходит с использованием hex чисел

Posted (edited)
4 часа назад, 4_tochka сказал:

Все операции производятся над байтовыми строками. HEX это всего лишь способ как отобразить промежуточный результат в читабельном виде. Если у вас приватный ключ в HEX то его следует привести к байтовой строке перед дальнейшими операциями.

Хочу дополнить вопрос:

в какой кодировке создавать байтовую строку? Base58Check?

Edited by Agnostik000
дополнение
Posted (edited)
4 часа назад, Agnostik000 сказал:

в какой кодировке создавать байтовую строку?

 

Вас, возможно, вводит в заблуждение слово "строка".

На вход криптографических функций подаются массивы типа байт.

В Base58Check кодируется приватный ключ на самой последней стадии.

 

Edited by Old Miner
Posted (edited)
1 час назад, Old Miner сказал:

 

Вас, возможно, вводит в заблуждение слово "строка".

На вход криптографических функций подаются массивы типа байт.

В Base58Check кодируется адрес на самой последней стадии.

 

Может быть вы сможете объяснить, каким образом из строки 800C28FCA386C7A227600B2FE50B7CAE11EC86D3BF1FBE471BE89827E19D72AA1D (первые два символа - префикс 0х80) на входе хеш функции sha 256 получить строку 8147786C4D15106333BF278D71DADAF1079EF2D2440A4DDE37D747DED5403592 на выходе? к какому виду и как нужно привести входящую строку?

Все говорят теорию, но ни кто не может показать как это делается практически.


 

 


 
Edited by Agnostik000
Posted (edited)

Вы функцию sha256 при помощи чего выполняете?  Вручную на бумажке? Или на компе?

Чем конкретно вы пользуетесь?

 

Вот тут есть раздел Private key to wallet import format. Если вы там в 1 - Private key вставите 

0C28FCA386C7A227600B2FE50B7CAE_SAMPLE_PRIVATE_KEY_DO_NOT_IMPORT_11EC86D3BF1FBE471BE89827E19D72AA1D

то получите приватный ключ в формате WIF:

5HueCGU8rMjxEXxiPuD5BDk_SAMPLE_PRIVATE_KEY_DO_NOT_IMPORT_u4MkFqeZyd4dZ1jvhTVqvbTLvyTJ
Edited by Old Miner
Posted (edited)
5 минут назад, Old Miner сказал:

Вы функцию sha256 при помощи чего выполняете?  Вручную на бумажке? Или на компе?

Чем конкретно вы пользуетесь?

 

Вот тут есть раздел Private key to wallet import format. Если вы там в 1 - Private key вставите 


0C28FCA386C7A227600B2FE50B7CAE_SAMPLE_PRIVATE_KEY_DO_NOT_IMPORT_11EC86D3BF1FBE471BE89827E19D72AA1D

то получите адрес


5HueCGU8rMjxEXxiPuD5BDk_SAMPLE_PRIVATE_KEY_DO_NOT_IMPORT_u4MkFqeZyd4dZ1jvhTVqvbTLvyTJ

Хеширование я выполняю на онлайн сайтах. Можно было бы предположить, что они дают неверный ответ. Однако он один и тот же и не совпадает с описанным результатом.

Я понимаю,  что я получу приватный ключ 5HueCGU8rMjxEXxiPuD5BDk_SAMPLE_PRIVATE_KEY_DO_NOT_IMPORT_u4MkFqeZyd4dZ1jvhTVqvbTLvyTJ, но я не могу получить его выполняя каждую операцию самостоятельно. В результате первого же хеширования у меня получается иной результат.

Edited by Agnostik000
Posted
1 минуту назад, Agnostik000 сказал:

Хеширование я выполняю на онлайн сайтах. Можно было бы предположить, что они дают неверный ответ. Однако он один и тот же и не совпадает с описанным результатом.

 

Вот вам сайт.

Там тоже будет не совпадать с примером?

Posted
1 час назад, Agnostik000 сказал:

Может быть вы сможете объяснить, каким образом из строки 800C28FCA386C7A227600B2FE50B7CAE11EC86D3BF1FBE471BE89827E19D72AA1D (первые два символа - префикс 0х80) на входе хеш функции sha 256 получить строку 8147786C4D15106333BF278D71DADAF1079EF2D2440A4DDE37D747DED5403592 на выходе? к какому виду и как нужно привести входящую строку?

Все говорят теорию, но ни кто не может показать как это делается практически.

Вот пример на ноде. https://repl.it/repls/AbleSoftBits

Обработка приватного ключа

Posted

@Agnostik000 , а ты какую цель преследуешь? Зачем тебе это? Проверить алго хеширования или что-то другое?

Если ты хочешь создать пары "адрес - приватный ключ" самостоятельно, думая, что это самый безопасный вариант и 100% защита от хакеров, я бы усомнился.

Posted (edited)
В 03.03.2018 в 00:04, Old Miner сказал:

 

Вот вам сайт.

Там тоже будет не совпадать с примером?

На указанном вами сайте результат совпадает с эталоном.

Выходит, что большинство онлайн сервисов неверно рассчитывают хеш функцию? Либо проблема в чем то еще.

 

P.S. Судя по всему "Ваш" калькулятор предварительно преобразует строку hex каким то образом и получается нужный результат.

А вот каким образом и во что он преобразует строку по прежнему осталось под вопросом...

P.S.2 Преобразуется в некую кодировку, безразличную к регистру буквенных символов.

Если сможете подсказать ответ и на этот вопрос, то буду вдвойне благодарен )

Но все равно спасибо вам за помощь!

Edited by Agnostik000
Posted (edited)
В 04.03.2018 в 20:12, Agnostik000 сказал:

А вот каким образом и во что он преобразует строку по прежнему осталось под вопросом...

 

Приватный ключ из примера начинается на 0С.

Если считать, что 0С - это 1 байт в шестнадцатеричной кодировке, то получаем из него 1 байт, в котором хранится значение 0С (или 12 в десятичном представлении).

Если считать, что 0С - это массив однобайтовых чисел, то получаем 2 байта со значениями 30 и 43 (или 48 и 67 в десятичном представлении).

 

Вы пользовались сайтами, где входные данные интерпретируются по второму варианту, что неверно.

Если непонятно, как из 0 получилось 30, смотрите таблицу символов ASCII.

 

Edited by Old Miner

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Similar Topics

    • oyostepper.es (oyostepper.com) - спам, развод. Шаговый двигатель глохнет. Как я могу сказать?

      Используйте шаговый двигатель nema17 *ссылка убита*. Вы можете без проблем совершить несколько пробежек на высокой скорости, а затем ось Z внезапно заглохнет. После отпускания кнопки перемещения и повторной попытки все работает нормально, но опорная точка отключена. Это не происходит в одном и том же месте или в определенное время. Кажется довольно случайным. Хотя скорее всего это произойдет после того, как мотор немного прогреется. Оси X и Y работали нормально, но у меня было несколько случаев,

      in Клиника

    • Экс-участник Ethereum Foundation предложил создать конкурирующий фонд с капиталом $1 млрд

      Бывший аналитик Ethereum Foundation Данкрад Файст (Dankrad Feist) призвал создать новую независимую организацию с финансированием не менее чем на $1 млрд, назвав ее необходимой для спасения и ускорения развития сети второй по капитализации криптовалюты. $1 млрд стартового финансирования новой структуры объяснил капитализацией Эфириума, которая оценивается примерно в $250 млрд. Средства, по замыслу эксперта по второй криптовалюте, позволят привлечь сильных специалистов и обеспечить координац

      in Новости криптовалют

    • Сломал лодышку не могу работать

      Здравствуйте, живу в Рязанской области, снимаю комнату в общаге, работаю на складе валбериз. Неделю назад помогал брату перепахать участок мотоблоком, закусило ремень и он сам поехал назад, я споткнулся и нога попала во фрезы. Перелом внешней лодышки, в травмпунке наложили гипс. Так как работа на ногах, в ближайший месяц не смогу работать, открыл больничный, на валберизе сказали что оплатят потом. Но, 18 мая только на прием к хирургу и не факт что закроют больничный. Денег как-то не насобирал,

      in Благотворительность

    • «Совет мира» Дональда Трампа хочет создать стейблкоин для помощи Газе

      Организованный президентом США Дональдом Трампом «Совет мира» рассматривает возможность создания долларового стейблкоина для проведения платежей в секторе Газа, сообщает Financial Times со ссылкой на источники. По данным собеседников издания, эмитентом токена может стать региональная компания из стран Персидского залива или Палестины, специализирующаяся на цифровых валютах.   Предполагается, что стейблкоин будет использоваться для цифровых платежей населения, что должно повысить безоп

      in Новости криптовалют

    • В Миссури предложили создать биткоин-резерв штата

      Сенатор-республиканец штата Миссури Бен Китли (Ben Keathley) представил законопроект, разрешающий казначейству инвестировать бюджетные средства в биткоин и хранить приобретенные активы не менее пяти лет. По истечении этого срока власти штата смогут перевести, продать или конвертировать биткоины в другие цифровые активы. Документ также предусматривает запрет на операции с участием иностранных государств и компаний за пределами Миссури.   Для финансирования резерва предлагается разрешит

      in Новости криптовалют

×
×
  • Create New...