Вернуться   Биткоин Форум > - Помощь начинающим
1 июля 2013, 12:18:32 AM   # 1
 
 
Сообщений: 37
Цитировать по имени
цитировать ответ
по умолчанию Re: Вопрос о публичном ключе

Взлом Биткоин адресов.
500 Биткоинов взломаны в "мозговом кошельке" с паролем "bitcoin is awesome"
Адрес кошелька: 14NWDXkQwcGN1Pd9fboL8npVynD5SfyJAE
Приватный ключ: 5J64pq77XjeacCezwmAr2V1s7snvvJkuAz8sENxw7xCkikceV6e
подробнее...


Всем кто хочет заработать Биткоины без вложений - рекомендую сайт http://bitcoin-zarabotat.ru
Этот вопрос не может быть связан с практическим использованием, а просто ради любопытства, если я хочу знать, что открытые ключи моих адресов являются, как я должен делать это? В моем понимании, один адрес соответствует одному открытому ключу, не так ли?

Для кошелька в электруме, есть так называемый "мастер открытого ключа", Является ли это для всего кошелька? Почему я не могу найти открытые ключи для каждого адреса?
Для кошелька в bitcoin_qt, как найти открытый ключ?
Для кошелька в blockchain.info, как найти открытый ключ?

Я знаю, что это не очень важно для изо дня в день сделки, но я просто любопытно, что открытые ключи выглядеть.
kira4light сейчас офлайн Пожаловаться на kira4light   Ответить с цитированием Мультицитирование сообщения от kira4light Быстрый ответ на сообщение kira4light


Как заработать Биткоины?
Без вложений. Не майнинг.


1 июля 2013, 1:00:12 AM   # 2
 
 
Сообщения: 588
Цитировать по имени
цитировать ответ
по умолчанию Re: Вопрос о публичном ключе

Получил 1806 Биткоинов
Реальная история.





Адрес, люди посылают BTC к является открытым ключом. Существует связанный с ним закрытый ключ для каждого адреса. Пара составляет набор ключей.
ЕКМ сейчас офлайн Пожаловаться на ЕКМ   Ответить с цитированием Мультицитирование сообщения от ЕОГО Быстрый ответ на сообщение ЕКМ

1 июля 2013, 1:53:53 AM   # 3
 
 
Сообщения: 1218
Цитировать по имени
цитировать ответ
по умолчанию Re: Вопрос о публичном ключе

Адрес, люди посылают BTC к является открытым ключом. Существует связанный с ним закрытый ключ для каждого адреса. Пара составляет набор ключей.

Неправильно. Адрес является контрольной хэш открытого ключа.

Для ОП открытого ключа, как правило, скрыты от глаз. Большинство сделок работать с адресом непосредственно и открытый ключ используется только внутри, когда монеты тратятся. Открытый ключ входят в ОМ, так что АЯ подписи (созданные тела ТХ & закрытый ключ) может быть подтвержден. Там действительно нет никаких причин, вы должны знать, открытый ключ, но если вы действительно хотите, чтобы увидеть открытый ключ вы можете использовать инструмент как pywallet сбросить бумажник.

На редактирования:
Другой вариант заключается в вычислении открытого ключа из закрытого ключа. Открытые ключи детерминированы. С учетом конкретного секретного ключа, собственно алгоритм (ECC), и выбор сжат или распаковку один всегда будет вычислять тот же открытый ключ. Открытый ключ не нужно хранить, так как он может быть пересчитаны по мере необходимости из закрытого ключа. На самом деле единственное, что вам нужно, чтобы убедиться, никогда не теряется является закрытым ключом.
DeathAndTaxes сейчас офлайн Пожаловаться на DeathAndTaxes   Ответить с цитированием Мультицитирование сообщения от DeathAndTaxes Быстрый ответ на сообщение DeathAndTaxes

1 июля 2013, 3:53:33 AM   # 4
 
 
Сообщения: 2016
Цитировать по имени
цитировать ответ
по умолчанию Re: Вопрос о публичном ключе

Как говорит DeathAndTaxes, адрес не является открытым ключом, это хэш хэш открытого ключа с 4 байта контрольной суммы пристегивается и переформатировать основание 58.

Этот вопрос не может быть связан с практическим использованием, а просто ради любопытства, если я хочу знать, что открытые ключи моих адресов являются, как я должен делать это?

Там действительно не простой способ, чтобы найти его. Я не использовал pywallet, так что я не знаю, какие варианты у него есть, но он может быть в состоянии вычислить открытые ключи для вас. Вы могли бы извлечь секретный ключ и ввести его в bitaddress.org в "детали бумажника" раздел, но один вы набрали свой закрытый ключ на веб-сайт, я бы немедленно рассмотреть соответствующий адрес, чтобы быть скомпрометированы и никогда бы не использовать его, чтобы получить биткойно снова (и удостоверился бы, чтобы освободить адрес любого Bitcoins перед входом в частном ключ).

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

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

Существует более чем один из способов представления открытого ключа (сжатый или несжатый). Каждое представление имеет свой собственный адрес. В зависимости от того, рассматривается ли каждое представление другой ключ или нет, это может быть действительным, чтобы сказать, что каждый открытый ключ имеет два разных адреса.

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

Я не эксперт по Электруму, но я считаю, что он использует детерминированный алгоритм для генерации адресов. Это означает, что каждый новый адрес основан на знании ранее сгенерированные частных / пары открытого ключа. "мастер открытого ключа" это просто первый открытый ключ в цепи частных / публичных пар ключей. Следующий адрес будет иметь свой собственный открытый ключ, но до тех пор, как оригинал "мастер" ключ известен все новые ключи (и, следовательно, их адреса) могут быть вычислены.

Для кошелька в bitcoin_qt, как найти открытый ключ?
Для кошелька в blockchain.info, как найти открытый ключ?

Я не в курсе каких-либо пользовательских инструментов, встроенных в любой из этих кошельков, которые будут отображаться открытый ключ для вас. Это не полезная информация, так что никто не удосужился создать интерфейс для его отображения. Как я уже говорил ранее, pywallet может иметь инструмент для определения открытых ключей, могут быть другие программы, которые вы можете обнаружить, что можно вычислить открытый ключ secp256k1 ECDSA, когда данный секретный ключ. Вообще, я бы рекомендовал не пытаться сделать это с любым адресом, который в настоящее время имеет (или когда-либо в будущем есть) любой биткоен.
DannyHamilton сейчас офлайн Пожаловаться на DannyHamilton   Ответить с цитированием Мультицитирование сообщения от DannyHamilton Быстрый ответ на сообщение DannyHamilton

1 июля 2013, 9:01:37 AM   # 5
 
 
Сообщения: 196
Цитировать по имени
цитировать ответ
по умолчанию Re: Вопрос о публичном ключе

Я узнавал о ключах (частных, публичных) и адреса на прошлой неделе, и я соединил сценарий питона, который будет принимать секретный ключ (в сыром шестнадцатеричном формате, только 256 битное число) и напечатать открытый ключ, WIF закрытый ключ (как несжатый и сжатый) и адрес (снова оба типа). Его в основном ту же функциональность, как bitaddress.org панели деталей бумажника, но не привязан к веб-браузер. Его немного большим, но я могу вставить его здесь, если кому-то интересно (это показывает шаги, необходимые для создания каждого ключа, хотя я не совсем получили генерацию адресов право же, как она не включает каких-либо дополнительных ведущих 1-х)

Еще один полезный инструмент keyconv (в комплекте с vanitygen), который будет принимать секретный ключ (формат WIF) и распечатать его открытый ключ (используйте опцию -v).
J35st3r сейчас офлайн Пожаловаться на J35st3r   Ответить с цитированием Мультицитирование сообщения от J35st3r Быстрый ответ на сообщение J35st3r

1 июля 2013, 9:22:24 AM   # 6
 
 
Сообщения: 1134
Цитировать по имени
цитировать ответ
по умолчанию Re: Вопрос о публичном ключе

Как говорит DeathAndTaxes, адрес не является открытым ключом, это хэш хэш открытого ключа с 4 байта контрольной суммы пристегивается и переформатировать основание 58.

Этот вопрос не может быть связан с практическим использованием, а просто ради любопытства, если я хочу знать, что открытые ключи моих адресов являются, как я должен делать это?

Там действительно не простой способ, чтобы найти его. Я не использовал pywallet, так что я не знаю, какие варианты у него есть, но он может быть в состоянии вычислить открытые ключи для вас. Вы могли бы извлечь секретный ключ и ввести его в bitaddress.org в "детали бумажника" раздел, но один вы набрали свой закрытый ключ на веб-сайт, я бы немедленно рассмотреть соответствующий адрес, чтобы быть скомпрометированы и никогда бы не использовать его, чтобы получить биткойно снова (и удостоверился бы, чтобы освободить адрес любого Bitcoins перед входом в частном ключ).
Действительно, pywallet дает открытые ключи, которые находятся внутри вашего бумажника

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

С технической точки зрения это может быть возможно более одного открытого ключа, чтобы иметь один и тот же адрес, но вероятность возникновения двух различных открытых ключей, которые разделяют адрес астрономически мала. Это не является реальным событием, так что вы можете предположить, что не будет больше, чем один открытый ключ для каждого адреса.
Число действительных адресов = 2 ^ 160
Число действительных открытых ключей = п-1 ~ 2 ^ 256

Так:
1 адрес представляет ~ 2 ^ 94 открытых ключей
Коэффициенты генерации двух различных открытых ключей, которые разделяют адрес: ~ 2 ^ 94/2 ^ 256 = 1/2 ^ 162

PS: Это предполагает, что вы используете только сжатый (или несжатый) ключи. В результате, учитывая и очень близко к этому.
jackjack сейчас офлайн Пожаловаться на jackjack   Ответить с цитированием Мультицитирование сообщения от jackjack Быстрый ответ на сообщение jackjack

1 июля 2013, 11:33:57 AM   # 7
 
 
Сообщения: 330
Цитировать по имени
цитировать ответ
по умолчанию Re: Вопрос о публичном ключе

Просто добавить - в случае OP может быть интересно о частный ключ, соответствующий адрес, который имеет несколько применений, такие как переход от одного типа кошелька на другой - закрытый ключ, соответствующий данный адрес можно извлечь из Bitcoin-Qt клиента с помощью команды консоли dumpprivkey затем адрес, ключ вы экстрагирования. (Консоль доступна через окно «отладка».) Клиент Multibit делает это немного легче, с функцией экспорта справа в меню «Инструменты».

Если вы когда-либо хотите использовать основные частные ключи, чтобы перейти от одного типа кошелька в другой, хотя, вам нужно быть фанатично осторожно скрытым изменение адреса, которые используют клиенты, чтобы получить изменения от исходящих транзакций. Вполне возможно, чтобы скопировать убивание закрытых ключей, по одному для каждого из приемных адресов, которые вы создали, от одного клиента к другому, убедитесь, что все исходящие транзакции отображаются в новом клиенте, а затем обнаружить, что - упс - ваш баланс меньше, чем должно быть. (В довершение, различные клиенты обрабатывать адреса для изменения транзакции по-разному.)
DrGregMulhauser сейчас офлайн Пожаловаться на DrGregMulhauser   Ответить с цитированием Мультицитирование сообщения от DrGregMulhauser Быстрый ответ на сообщение DrGregMulhauser

2 июля 2013, 10:58:29 PM   # 8
 
 
Сообщений: 37
Цитировать по имени
цитировать ответ
по умолчанию Re: Вопрос о публичном ключе

Просто добавить - в случае OP может быть интересно о частный ключ, соответствующий адресу,

Я спрашивал об открытых ключах не закрытых ключах.

Но я думаю, что ваши предложения будут полезны. Я на самом деле переместить адреса из Bitcoin-кварта в Электрум. кварты просто слишком медленно ...

Таким образом, вы говорили, проблемы скрытых адресов изменения, вы лично испытать это?
kira4light сейчас офлайн Пожаловаться на kira4light   Ответить с цитированием Мультицитирование сообщения от kira4light Быстрый ответ на сообщение kira4light

2 июля 2013, 11:01:23 PM   # 9
 
 
Сообщений: 37
Цитировать по имени
цитировать ответ
по умолчанию Re: Вопрос о публичном ключе

Его немного большим, но я могу вставить его здесь, если кому-то интересно

Я заинтересован
kira4light сейчас офлайн Пожаловаться на kira4light   Ответить с цитированием Мультицитирование сообщения от kira4light Быстрый ответ на сообщение kira4light

2 июля 2013, 11:09:23 PM   # 10
 
 
Сообщений: 37
Цитировать по имени
цитировать ответ
по умолчанию Re: Вопрос о публичном ключе

Адрес, люди посылают BTC к является открытым ключом. Существует связанный с ним закрытый ключ для каждого адреса. Пара составляет набор ключей.

Неправильно. Адрес является контрольной хэш открытого ключа.

Для ОП открытого ключа, как правило, скрыты от глаз. Большинство сделок работать с адресом непосредственно и открытый ключ используется только внутри, когда монеты тратятся. Открытый ключ входят в ОМ, так что АЯ подписи (созданные тела ТХ & закрытый ключ) может быть подтвержден. Там действительно нет никаких причин, вы должны знать, открытый ключ, но если вы действительно хотите, чтобы увидеть открытый ключ вы можете использовать инструмент как pywallet сбросить бумажник.

На редактирования:
Другой вариант заключается в вычислении открытого ключа из закрытого ключа. Открытые ключи детерминированы. С учетом конкретного секретного ключа, собственно алгоритм (ECC), и выбор сжат или распаковку один всегда будет вычислять тот же открытый ключ. Открытый ключ не нужно хранить, так как он может быть пересчитаны по мере необходимости из закрытого ключа. На самом деле единственное, что вам нужно, чтобы убедиться, никогда не теряется является закрытым ключом.

Да, я знаю из личного ключа открытого ключа может быть вычислена.

Но мой acutal вопрос, можете вы вычислить открытый ключ от только адреса? Есть некоторые коды / программы, чтобы сделать это?

Я предполагаю, что это походит на взятие обратного некоторой хэш-функции ...

kira4light сейчас офлайн Пожаловаться на kira4light   Ответить с цитированием Мультицитирование сообщения от kira4light Быстрый ответ на сообщение kira4light

2 июля 2013, 11:22:18 PM   # 11
 
 
Сообщения: 2016
Цитировать по имени
цитировать ответ
по умолчанию Re: Вопрос о публичном ключе

Я предполагаю, что это походит на взятие обратного некоторой хэш-функции ...

Это именно то, что она есть, и если бы это было возможно, то это не будет очень полезной хэш-функция.

Таким образом, нет. Учитывая только адрес Bitcoin (а ​​не ключ), то в настоящее время невозможно вычислить открытый ключ. Может быть, когда-нибудь в будущем некоторые математики найдут серьезные недостатки как в алгоритме SHA-256 и алгоритм RIPEMD-160. Пока / если это никогда не происходит, вы можете смело предположить, что открытый ключ не может быть определен из адреса Bitcoin.
DannyHamilton сейчас офлайн Пожаловаться на DannyHamilton   Ответить с цитированием Мультицитирование сообщения от DannyHamilton Быстрый ответ на сообщение DannyHamilton

3 июля 2013, 8:17:53 AM   # 12
 
 
Сообщения: 196
Цитировать по имени
цитировать ответ
по умолчанию Re: Вопрос о публичном ключе

Его немного большим, но я могу вставить его здесь, если кому-то интересно

Я заинтересован

Хорошо, здесь это. Я сделал это, главным образом, в качестве учебного упражнения, код почти все из pywallet.py так наконечник шляпы к jackjack.

Код:

# Bitaddr.py - печать Bitcoin адрес дали шестигранной секретный ключ
# В качестве бонуса сделать brainwallet кодирование слишком

# Объединяет код из ...

# Pywallet.py jackjack в
# https://github.com/jackjack-jj/pywallet

# https://bitcointalk.org/index.php?topic=23241.0

импорт hashlib

# Код от pywallet.py для кодирования bas58

__b58chars = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
__b58base = Len (__ b58chars)

Защиту b58encode (v):
""" закодировать v, который является строка байтов, в base58.
"""

LONG_VALUE = 0L
для (I, с) в Перечислим (V [:: - 1]):
LONG_VALUE + = (256 ** я) * Ord (с)

Результат = «»
в то время как LONG_VALUE >= __b58base:
ДИВ, мод = divmod (LONG_VALUE, __b58base)
Результат = __b58chars [мод] + результат
LONG_VALUE = DIV
Результат = __b58chars [LONG_VALUE] + результат

# Bitcoin делает немного опережените нулевое сжатие:
# Ведущих 0-байты на входе становятся ведущим-1s
NPAD = 0
для с в V:
если с == '\ 0': NPAD + = 1
еще: разрыв

возврата (__b58chars [0] * NPAD) + результат

Защиту b58decode (V, длина):
""" расшифровывает v в строку LEN байтов
"""
LONG_VALUE = 0L
для (I, с) в Перечислим (V [:: - 1]):
LONG_VALUE + = __b58chars.find (с) * (__b58base ** я)

Результат = «»
в то время как LONG_VALUE >= 256:
DIV, MOD = divmod (LONG_VALUE, 256)
Результат = CHR (моды) + результат
LONG_VALUE = DIV
Результат = CHR (LONG_VALUE) + результат

NPAD = 0
для с в V:
если с == __b58chars [0]: NPAD + 1 =
еще: разрыв

Результат = CHR (0) * NPAD + результат
если длина не является None и LEN (результат) = длина:
возвращения None

возвращаемый результат

# Конец реализации bitcointools base58

# https://bitcointalk.org/index.php?topic=23241.0
# На самом деле это тоже из pywallet.py

Класс CurveFp (объект):
Защиту __init __ (я, р, а, б):
само .__ р = р
само .__ а =
самостоятельно .__ Ь = Ь

Защита р (Я):
Самовозврат .__ р

DEF а (сам):
Самовозврат .__

Защиту б (Я):
Самовозврат .__ б

Защиту contains_point (я, х, у):
возвращение (у * у - (х * х * х + с собственной .__ а * х + с собственной .__ б))% собственной .__ р == 0

Класс Point (объект):
не Защита __init __ (самостоятельно, кривой, х, у, порядок = None):
самостоятельная .__ кривой = кривой
самостоятельно .__ х = х
само .__ у = у
самостоятельно .__ порядок = порядок
если само .__ кривая: утверждать, само .__ curve.contains_point (х, у)
если заказ: утверждать сам * заказ == INFINITY

Защиту __add __ (я, другое):
если иное == INFINITY: Самовозврат
если само == INFINITY: возвращение другого
утверждают само .__ кривой == другой кривой .__
если само .__ х == другой .__ х:
если (само .__ у + у друга .__)% собственной .__ curve.p () == 0:
возвращение INFINITY
еще:
вернуться self.double ()

р = Автономный .__ curve.p ()
л = ((другие .__ у - Самостоятельно .__ у) * \
inverse_mod (другой .__ х - само .__ х, р)) р%
x3 = (л * л - само .__ х - другой .__ х)% р
у3 = (л * (само .__ х - х3) - само .__ у)% р
точка возврата (само .__ кривая, x3, y3)

Защиту __mul __ (я, другое):
Защиту leftmost_bit (х):
утверждать х > 0
Результат = 1L
в то время как результат <= Х: результат = 2 * результат
возвращаемый результат / 2

е = другие
если само .__ порядок: е = е% собственной .__ заказа
если е == 0: возвращение INFINITY
если само == INFINITY: возвращение INFINITY
утверждать е > 0
e3 = 3 * е
negative_self = Точка (само .__ кривой, само .__ х, у -self .__, само .__ заказа)
я = leftmost_bit (е3) / 2
результат = сам
в то время как я > 1:
Результат = result.double ()
если (e3 & я)! = 0 и (е & я) == 0: результат = результат + самостоятельно
если (e3 & я) == 0 и (е & я) = 0: результат = результат + negative_self
I = I / 2
возвращаемый результат

Защиту __rmul __ (я, другое):
Самовозврат * другой

Защиту __str __ (Я):
если само == INFINITY: возвращение "бесконечность"
вернуть "(% D,% d)" % (Само .__ х, Self .__ у)

Защита двойной (сам):
если само == INFINITY:
возвращение INFINITY

р = Автономный .__ curve.p ()
а = само .__ curve.a ()
л = ((3 * само .__ х * само .__ х + а) * \
inverse_mod (2 * Self .__ у, р)) р%
x3 = (л * л - 2 * само .__ х)% р
у3 = (л * (само .__ х - х3) - само .__ у)% р
точка возврата (само .__ кривая, x3, y3)

Защиту х (Я):
Самовозврат .__ х

Защита у (Я):
Самовозврат .__ у

Защиту кривой (сам):
Самовозврат .__ кривую

Порядок четкости (Я):
Самовозврат .__ заказ

ИНФИНИТИ = Точка (Ничего, Ничего, ничего нет)

Защиту inverse_mod (а, м):
если < 0 или т <= А: а =% м
в, г = а, м
UC, VC, уд, VD = 1, 0, 0, 1
в то время как с = 0:
д, с, d = divmod (д, в) + (с,)
УНЦ, VC, уд, VD = уд - д * ис, VD - д * VC, УНЦ, ВК
утверждают, д == 1
если уд > 0: возвращение уд
еще: вернуть уд + т

# secp256k1
_p = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2FL
_r = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141L
_b = 0x0000000000000000000000000000000000000000000000000000000000000007L
_а = 0x0000000000000000000000000000000000000000000000000000000000000000L
_Gx = 0x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798L
_Gy = 0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8L

Класс Signature (объект):
Защиту __init __ (я, R, S):
self.r = г
self.s = ы

Класс Public_key (объект):
Защиту __init __ (я, генератор, пункт):
self.curve = generator.curve ()
self.generator = генератор
self.point = точка
п = generator.order ()
если не п:
поднять RuntimeError, "пункт Генератор должен иметь порядок."
если не п * точка == INFINITY:
поднять RuntimeError, "заказ точка Генератор плохо."
если point.x () < 0 или п <= Point.x () или point.y () < 0 или п <= Point.y ():
поднять RuntimeError, "Точка Генератора имеет й или у вне диапазона."

Защиту проверяет (самостоятельно, хэш, подпись):
G = self.generator
п = G.order ()
г = signature.r
s = signature.s
если г < 1 или г > п-1: возвращение Ложные
если с < 1 или с > п-1: возвращение Ложные
с = inverse_mod (с, п)
u1 = (хэш * с)% п
и2 = (г * в) п%
ху = u1 * G + u2 * self.point
v = ху.й ()% п
вернуться V == г

Класс private_key (объект):
Защиту __init __ (я, public_key, secret_multiplier):
self.public_key = public_key
self.secret_multiplier = secret_multiplier

Защита дер (Я):
hex_der_key = '06052b8104000a30740201010420' + \
'% 064x' % self.secret_multiplier + \
'A00706052b8104000aa14403420004' + \
'% 064x' % self.public_key.point.x () + \
'% 064x' % self.public_key.point.y ()
вернуть hex_der_key.decode ( 'шестигранной')

Защита знак (я, хэш, random_k):
G = self.public_key.generator
п = G.order ()
к = random_k% п
p1 = к * G
г = p1.x ()
если г == 0: поднять RuntimeError, "удивительно повезло случайное число г"
s = (inverse_mod (к, п) * \
(Хэш + (self.secret_multiplier * г)% п))% п
если s == 0: поднять RuntimeError, "удивительно повезло случайное число s"
Подпись возврата (R, S)

curve_256 = CurveFp (_p, _о, _b)
generator_256 = Точка (curve_256, _Gx, _Gy, _r)
г = generator_256

Защиту hexprivkey2addr (privkey_hex):
печать privkey_hex, " собств ключ HEX"

# Кодировать закрытый ключ в WIF см https://en.bitcoin.it/wiki/Base58Check_encoding

data_hex = "80" + privkey_hex
data_bin = data_hex.decode ( 'шестигранной')

хэш = hashlib.sha256 (hashlib.sha256 (data_bin) .digest ()). дайджеста ()
sha_hex = hash.encode ( 'hex_codec')

step2_hex = data_hex + sha_hex [8]

privkey = b58encode (step2_hex.decode ( 'шестигранной'))
печать privkey, " Секретный ключ WIF"

# Теперь печать сжатого WIF закрытого ключа
# Bitaddress.org присоединяет 01 так попробовать, что ...

data_hex = "80" + Privkey_hex + "01"
data_bin = data_hex.decode ( 'шестигранной')

хэш = hashlib.sha256 (hashlib.sha256 (data_bin) .digest ()). дайджеста ()
sha_hex = hash.encode ( 'hex_codec')

step2_hex = data_hex + sha_hex [8]

privkey = b58encode (step2_hex.decode ( 'шестигранной'))
печать privkey, " закрытый ключ WIF (ср)"


# ===========================================
# Следующий шаг заключается в преобразовании с открытым ключом
# ===========================================

секрет = INT (privkey_hex, 16) # Нужно это как десятичное число

# Генерировать Публичный
Публичный = Public_key (г, г секрет *)
# Печать 'Публичные', шестигранный (pubkey.point.x ()), шестигранный (pubkey.point.y ())

# Это неуклюжее, есть, вероятно, лучший способ ...
x_hex = гекс (pubkey.point.x ())
x_hex = x_hex [2:] # Удалить ведущих 0x
x_hex = x_hex [: - 1] # Удалить задний L
# Pad с ведущими 0-х до 64 символов ...
x_hex = x_hex.zfill (64)
# Распечатать "Икс", x_hex
y_hex = гекс (pubkey.point.y ())
y_hex = y_hex [2:] # Удалить ведущих 0x
y_hex = y_hex [: - 1] # Удалить задний L
# Возможно, нужно раздуть с ведущими 0-х до 64 символов ...
y_hex = y_hex.zfill (64)
# Распечатать "Y", y_hex

pubkey_hex = "04" + X_hex + y_hex
печать pubkey_hex, " открытый ключ"

# ==================
# Поколение Адрес
# ==================

Публичный = pubkey_hex

data_bin = pubkey.decode ( 'шестигранной')

# Первая стадия представляет собой SHA256
data_bin = hashlib.sha256 (data_bin) .digest ()

# Второй шаг ripemd160
хэш = hashlib.new ( 'ripemd160')
hash.update (data_bin)
hash_digest = hash.digest ()
hash_hex = hash.hexdigest ()

печать hash_hex + "  несжатый хэш (Публичный)"

# Теперь закодировать адрес

data_hex = "00" + hash_hex # 00 это версия байт, также может быть 05
data_bin = data_hex.decode ( 'шестигранной')

хэш = hashlib.sha256 (hashlib.sha256 (data_bin) .digest ()). дайджеста ()
sha_hex = hash.encode ( 'hex_codec')
step2_hex = data_hex + sha_hex [8]

печать b58encode (step2_hex.decode ( 'шестигранной')), " адрес"

# ================================================= ===========================================
# Теперь сделайте то же самое для СЖАТЫХ открытого ключа (см https://bitcointalk.org/index.php?topic=205490.0)
# ================================================= ===========================================

lastchar = Публичный [-2:]
Val = lastchar.decode ( 'шестигранной')
если (Ord (Val)% 2):
# Распечатать "странный"
xpubkey = "03" + Публичные [2:66]
еще:
# Распечатать "даже"
xpubkey = "02" + Публичные [2:66]

печать xpubkey + "  Комп Публичных"

data_bin = xpubkey.decode ( 'шестигранной')

# Первая стадия представляет собой SHA256
data_bin = hashlib.sha256 (data_bin) .digest ()

# Второй шаг ripemd160
хэш = hashlib.new ( 'ripemd160')
hash.update (data_bin)
hash_digest = hash.digest ()
hash_hex = hash.hexdigest () # Сохраняет шаг кодирования

печать hash_hex + "  хэш (сжатый Публичных)"

# Теперь закодировать адрес

data_hex = "00" + hash_hex # 00 это версия байт, также может быть 05
data_bin = data_hex.decode ( 'шестигранной')

хэш = hashlib.sha256 (hashlib.sha256 (data_bin) .digest ()). дайджеста ()
sha_hex = hash.encode ( 'hex_codec')
step2_hex = data_hex + sha_hex [8]

печать b58encode (step2_hex.decode ( 'шестигранной')), " сжатый адрес"

Защиту brainwallet (ключевая фраза):
Распечатать "= ключевая фраза [" + + Ключевая фраза "]"
privkey_bin = hashlib.sha256 (ключевая фраза) .digest () # Single sha256 (стандартный алгоритм мозга)
# Privkey_bin = hashlib.sha256 (privkey_bin) .digest () # Double sha256 (не полезно)

# Privkey_hex = hashlib.sha256 (ключевая фраза) .hexdigest () # Может генерировать гекс непосредственно
privkey_hex = privkey_bin.encode ( 'hex_codec') # В качестве альтернативы из бен
hexprivkey2addr (privkey_hex)

# ============================= главный =================== ===========
если __name__ == "__главный__":
# Примеры
hexprivkey2addr ("0000000000000000000000000000000000000000000000000000000000000001")
Распечатать
hexprivkey2addr ("00000000000000000000000000000000000000000000000000000000000000b6") # Имеет адрес на 11 префиксов
Распечатать
hexprivkey2addr ("deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef")
Распечатать
brainwallet ("правильная лошадь батареи штапельного")
J35st3r сейчас офлайн Пожаловаться на J35st3r   Ответить с цитированием Мультицитирование сообщения от J35st3r Быстрый ответ на сообщение J35st3r

3 июля 2013, 9:36:19 AM   # 13
 
 
Сообщения: 330
Цитировать по имени
цитировать ответ
по умолчанию Re: Вопрос о публичном ключе

Но я думаю, что ваши предложения будут полезны. Я на самом деле переместить адреса из Bitcoin-кварта в Электрум. кварты просто слишком медленно ...

Таким образом, вы говорили, проблемы скрытых адресов изменения, вы лично испытать это?

Просто следить - да, я лично испытал это, когда экспериментировал с переходом от Bitcoin-Qt в многоразрядный. Если сбросить закрытые ключи только для адресов, отображаемых в списке Bitcoin-Qt GUI принимающих адресов, а затем импортировать их на что-нибудь еще (например, Multibit), вы можете посмотреть список транзакций восстановления в новом клиенте, и все будет выглядеть нормально на первый, как эти сделки появляются , но общий баланс будет неправильно.

Причина?

Список адресов приема, отображаемых в главном интерфейсе Bitcoin-QT не включает в себя все дополнительные адреса, созданные за кадром для получения изменений. Эти адреса не отображаются непосредственно в главном графическом интерфейсе. Так, экспорт закрытых ключей только для приема адресов, которые вы можете увидеть в графическом интерфейсе не дает вам полный набор. В результате, если вы двигаетесь, что частичный набор для нового клиента, ваш общий баланс будет отсутствовать все суммы, которые вы получили обратно в эти скрытые адреса изменения.

Хотя это только основная особенность, как Bitcoin операция работы - общие входы и выходы должны балансировать - результат при попытке перемещения между клиентами могут быть немного нелогичным, если вы не ожидали его и смотреть только на список GUI получения адресов. Это также объясняет некоторые из страшных историй о людях, потратив небольшую сумму из бумажного бумажника, а затем случайно теряют остальную часть их баланса: они не понимают, что потратив небольшую сумму от бумажного бумажника означал, что бумажник стал бесполезным, так как остаток от их сделок пошел на другой адрес изменения. (Эти виды деталей также означают, что часто проще просто перевести весь баланс себя при перемещении между кошельками, а не пытаться сохранить всю историю транзакций оригинальных кошельков, адрес и т.д.)
DrGregMulhauser сейчас офлайн Пожаловаться на DrGregMulhauser   Ответить с цитированием Мультицитирование сообщения от DrGregMulhauser Быстрый ответ на сообщение DrGregMulhauser

3 июля 2013, 9:53:16 AM   # 14
 
 
Сообщения: 168
Цитировать по имени
цитировать ответ
по умолчанию Re: Вопрос о публичном ключе

http://gobittest.appspot.com/Address

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

Тем не менее, поставив свой личный ключ в веб-формы, возможно, не привычка, вы хотите попасть.
Но что сайт отлично подходит для отладки кода, чтобы проверить, что код, который вы пишете дает правильные результаты по пути к поколению base58 адреса.
AliceWonder сейчас офлайн Пожаловаться на AliceWonder   Ответить с цитированием Мультицитирование сообщения от AliceWonder Быстрый ответ на сообщение AliceWonder



Как заработать Биткоины?

Bitcoin Wallet * Portefeuille Bitcoin * Monedero Bitcoin * Carteira Bitcoin * Portafoglio Bitcoin * Bitcoin Cüzdan * 比特币钱包

bitcoin-zarabotat.ru
Почта для связи: bitcoin-zarabotat.ru@yandex.ru

3HmAQ9FkRFk6HZGuwExYxL62y7C1B9MwPW