Загрузка...

[Python] Разбираемся в устройстве биткойна

Тема в разделе Статьи создана пользователем AIexa 6 дек 2022. (поднята 11 июн 2025 в 16:51) 752 просмотра

  1. AIexa
    AIexa Автор темы 6 дек 2022 Лучший софт - lolz.live/threads/1634798/ :+rep: 11 625 24 мар 2020
    В этой статье мы посмотрим как получается адресс биткойна из сид фразы

    Что понадобится:
    - Python
    - Умение копипастить


    Теория
    Чтобы получить приват кей и паблик кей из сид фразы, нам нужно выполнить следующие действия:
    - Задействовать pbkdf2hmac_sha512 шифрование на нашу сид фразу, на 2048 кругов, с выходной длиной ключа в 64 байта, с солью 'mnemonic'
    - Задействовать hmac_sha512 на наш результат с предыдущего этапа с ключом 'Bitcoin seed'

    - Вычленить 32 байта, с левой стороны - это наш приват кей
    - Получить публичный ключ из приват кея, с помощью элиптическй кривой secp256k1 и скомпрессировать его, если у вас есть вопросы, что это за кривая, то вок доходчивое описание из вики, поймет даже школьник

    [IMG]


    Теперь у нас на руках есть паблик кей и мы можем получить адресс нашего битка
    - Делаем шифрование sha256 на паблик кей
    - Делаем шифрование Ripemd160 на на хэш из предыдущего этапа и прибавляем нулевой байт в начало
    - Делаем двойной sha256 на хэш из предыдущего этапа и берем из него 4 первых байта
    - Соединяем ripemd хэш с двойным хэшем 21 + 4 байт, у нас получаются 25 байтов в итоге
    - Шифруем это все в base58 и получаем адресс нашего битка


    Код

    Python
    import hashlib
    import hmac
    from ecdsa import SECP256k1, SigningKey
    import binascii
    import base58


    if __name__ == "__main__":
    seed = "mushroom orange black valve erase brother submit biology tortoise debate arrive slim"
    key = hashlib.pbkdf2_hmac('sha512', seed.encode("utf-8"), "mnemonic".encode("utf-8"), 2048, 64)
    master_key_chain_code = hmac.new('Bitcoin seed'.encode("utf-8"), key, hashlib.sha512)
    priv_key = binascii.unhexlify(master_key_chain_code.hexdigest())[:-32]

    priv = SigningKey.from_string(priv_key, curve=SECP256k1)
    pub = priv.get_verifying_key().to_string()
    public_key = pub.hex()[:64]
    public_key_to_int = int(public_key, 16)

    if public_key_to_int % 2:
    public_key = '02' + public_key
    else:
    public_key = '03' + public_key

    public_key_bytes = binascii.unhexlify(public_key)
    first_hash = hashlib.sha256(public_key_bytes)
    second_hash = hashlib.new('ripemd160', binascii.unhexlify(first_hash.hexdigest()))
    second_hash = binascii.unhexlify('00'+second_hash.hexdigest())
    double_hash = hashlib.sha256(second_hash)
    double_hash = hashlib.sha256(binascii.unhexlify(double_hash.hexdigest()))
    final_hash = second_hash.hex() + double_hash.hexdigest()[:8]

    adress = base58.b58encode(binascii.unhexlify(final_hash)).decode("utf-8")

    print(f"Private key: {priv_key.hex()}")
    print(f"Public key: {public_key}")
    print(f"Adress: {adress}")

    Результат
    Код
    Private key: a0ccf14c939faa07b896cd5fb306a37fb3f9cb041196c5364d0cca9dbd82e53a
    Public key: 03d1cc1f6bdea4d17eb7f2573d676f9ddb087f8b784c912c4466407781d8acfe38
    Adress: 18XzGRj3fBqLtkB2b9CfJT8zrHpRaGSacQ

    Проверяем правильность наших операций https://brainwalletx.github.io/#generator

    [IMG]
     
    Этот материал оказался полезным?
    Вы можете отблагодарить автора темы путем перевода средств на баланс
    Отблагодарить автора
    6 дек 2022 Изменено
  2. jevgensv98
    jevgensv98 6 дек 2022 Заблокирован(а) 419 14 авг 2022
    Теперь я смогу сделать свой Бинанс?
     
    1. xZhmih
      jevgensv98, сможешь сделать бизнес на своем бинансе
  3. Gaotan
    Gaotan 6 дек 2022 Заблокирован(а) 2296 22 дек 2021
    Не до конца понимаю практичности этой статьи, так как если захочешь работать напрямую с блокчейном бтк, то придеться поднимать свою ноду, а там это уже вся эта генерация встроена
     
  4. DiWater
    DiWater 6 дек 2022 Заблокирован(а) 203 17 авг 2022
    Годнота буду пользоваться!
     
  5. Fleep
    Fleep 6 дек 2022 236 16 окт 2020
    Неплохо, с базой можно рандомно комбинировать эти фразы и тупо ****ить кошели
     
  6. bludboii
    bludboii 6 дек 2022 Заблокирован(а) 159 18 ноя 2021
    а другие токены получаются так же через шифрование?
     
Загрузка...
Top