Перейти к содержанию

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


Рекомендуемые сообщения

Опубликовано

Добрый день.

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

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

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

Опубликовано
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 а от байтовой строки

Опубликовано
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 перевести в байтовую строку и так каждый раз? Дело в том, что данная операция почему то ни где не описана

Опубликовано

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

Опубликовано
59 минут назад, 4_tochka сказал:

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

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

Опубликовано (изменено)
4 часа назад, 4_tochka сказал:

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

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

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

Изменено пользователем Agnostik000
дополнение
Опубликовано (изменено)
4 часа назад, Agnostik000 сказал:

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

 

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

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

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

 

Изменено пользователем Old Miner
Опубликовано (изменено)
1 час назад, Old Miner сказал:

 

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

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

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

 

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

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


 

 


 
Изменено пользователем Agnostik000
Опубликовано (изменено)

Вы функцию 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
Изменено пользователем Old Miner
Опубликовано (изменено)
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, но я не могу получить его выполняя каждую операцию самостоятельно. В результате первого же хеширования у меня получается иной результат.

Изменено пользователем Agnostik000
Опубликовано
1 минуту назад, Agnostik000 сказал:

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

 

Вот вам сайт.

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

Опубликовано
1 час назад, Agnostik000 сказал:

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

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

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

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

Опубликовано

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

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

Опубликовано (изменено)
В 03.03.2018 в 00:04, Old Miner сказал:

 

Вот вам сайт.

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

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

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

 

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

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

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

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

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

Изменено пользователем Agnostik000
Опубликовано (изменено)
В 04.03.2018 в 20:12, Agnostik000 сказал:

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

 

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

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

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

 

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

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

 

Изменено пользователем Old Miner

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйте новый аккаунт в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
  • Похожие топики

    • Прадип Бхандари призвал Индию создать госрезерв в биткоинах

      Представитель правящей Индийской народной партии Прадип Бхандари (Pradeep Bhandari) призвал правительство изучить возможность создания стратегического резерва в биткоинах, чтобы повысить экономическую устойчивость страны. Бхандари привел в пример США, где в некоторых штатах уже подписаны законы о создании резерва в первой криптовалюте, а также граничащее с Индией Королевство Бутан, которое занимается майнингом более пяти лет. Мировые финансы смещаются в сторону криптовалют, поэтому Индия,

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

    • Глава ФНС Даниил Егоров: Нужно создать инфраструктуру для легальной продажи добытой криптовалюты

      Руководитель Федеральной налоговой службы (ФНС) Даниил Егоров в рамках Петербургского международного экономического форума 2025 заявил, что в России следует создать инфраструктуру для легальной продажи добытой криптовалюты. По словам главы ведомства, сейчас легальные майнеры в стране сталкиваются с тем, что вынуждены продавать криптовалюты либо «кому-то», либо на иностранных площадках, поскольку отсутствует понятный механизм реализации цифровых активов.   «С точки зрения развития, ко

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

    • Ранний разработчик Биткоина предложил создать «Биткоин-Моссад» для защиты инвесторов

      Финский программист и ученый Марти Малми (Martti Malmi), один из первых разработчиков блокчейна Биткоина, сотрудничавший с Сатоси Накамото, предложил идею о создании спецподразделения для защиты держателей BTC от потенциальных угроз, по аналогии с внешней разведкой Израиля Моссад. Малми озвучил свою идею в соцсети X, где он принял участие в обсуждении, начатом соучредителем платформы Vora Джесси Познером (Jesse Posner) и экспертом по физической безопасности Алексом Станчиком (Alex Stanczyk)

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

    • Синтия Ламмис: Нужно создать стандарты для использования мемкоинов должностными лицами

      Сенатор-республиканец Синтия Ламмис (Cynthia Lummis) от штата Вайоминг призвала Конгресс как можно быстрее создать стандарты для использования мемкоинов должностными лицами, включая президента США Дональда Трампа. Недавно Трамп пригласил на эксклюзивный гала-ужин 220 крупнейших держателей токенов. Мероприятие должно состояться 22 мая в Trump National Golf Club. Это объявление вызвало недовольство не только у конкурирующей партии демократов, но и у сторонников Трампа. Республиканка Синтия Ла

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

    • Сальвадор предложил США создать единую песочницу для токенизации акций

      Национальная комиссия по цифровым активам Сальвадора (CNAD) в сотрудничестве с американской юридической фирмой Perkin Law Firm и бывшим партнером банка Goldman Sachs Хизер Шемилт предложила Комиссии по ценным бумагам и биржам США (SEC) создать международную «криптопесочницу». Нормативная песочница позволит регуляторам США и Сальвадора совместно наблюдать за развитием проектов, связанных с цифровыми активами и токенизацией. Это будет происходить в контролируемой среде, где регуляторы обеих с

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

×
×
  • Создать...