Конвертировать Bitcoin закрытый ключ из текста файла - построчно - PullRequest
0 голосов
/ 19 апреля 2020

я начал изучать Python, чтобы преуспеть в моем проекте ниже, но мне нужна помощь.

У меня есть какой-то закрытый ключ Биткойн / Litecoin некоторых старых кошельков. Я почти уверен, что эти адреса пусты, но прежде чем стереть этот старый файл, я хотел бы преобразовать эти разные закрытые ключи в адрес publi c, чтобы проверить, все ли они пусты. Я бы использовал онлайн-сервис для одновременной проверки этих адресов (некоторые позволяют контролировать до 50 адресов).

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

После долгих исследований у меня есть этот функциональный код:

import ecdsa
import hashlib
import base58


with open("my_private_key.txt", "r") as f:    #Input file path
      data = f.readline()
      for line in data:

                  #Convert hex private key to bytes
         private_key = bytes.fromhex(data)      

                  #Derivation of the private key
         signing_key = ecdsa.SigningKey.from_string(private_key, curve=ecdsa.SECP256k1)
         verifying_key = signing_key.get_verifying_key()

         public_key = bytes.fromhex("04") + verifying_key.to_string()

                 #Hashes of public key
         sha256_1 = hashlib.sha256(public_key)
         ripemd160 = hashlib.new("ripemd160")
         ripemd160.update(sha256_1.digest())

                 #Adding prefix to identify Network
         hashed_public_key = bytes.fromhex("00") + ripemd160.digest()

                 #Checksum calculation
         checksum_full = hashlib.sha256(hashlib.sha256(hashed_public_key).digest()).digest()
         checksum = checksum_full[:4]

                 #Adding checksum to hashpubkey         
         bin_addr = hashed_public_key + checksum

                 #Encoding to address
         address = str(base58.b58encode(bin_addr))
         final_address = address[2:-1]

         print(final_address)

         with open("my_addresses.txt", "a") as i:
            i.write(final_address)

У меня две проблемы:

  1. Закрытый ключ вычисления -> адрес работает хорошо, но обрабатывается только первая строка моего входного текстового файла.
  2. Первая строка обработано 65 раз, поэтому мои выходные файлы содержат в 65 раз один и тот же адрес, сгенерированный из моего первого закрытого ключа. В Python Интерпретаторе это 65 раз также появляется.

Я понял f.readline() чтение файла построчно, и я думал, что for line in data: будет читать этот файл построчно для обработки каждого строка.

Я пытался переместить местоположение моей переменной data, но на этот раз обрабатывается только моя вторая текстовая строка.

with open("my_private_key.txt", "r") as f:    #Input file path
      for line in data:
          data = f.readline()
                         .....

Я провел много тестов, но я не могу понять, что не так. Где я go ошибаюсь ??

Заранее благодарю за помощь.

1 Ответ

2 голосов
/ 19 апреля 2020

Вы неправильно используете readline (), это вернет только одну строку.

Тем не менее, вы можете перебирать строки в файле только с помощью для l oop,

import ecdsa
import hashlib
import base58


with open("my_private_key.txt", "r") as f:    #Input file path
      for line in f:

                  #Convert hex private key to bytes
         private_key = bytes.fromhex(line)      

                  #Derivation of the private key
         signing_key = ecdsa.SigningKey.from_string(private_key, curve=ecdsa.SECP256k1)
         verifying_key = signing_key.get_verifying_key()

         public_key = bytes.fromhex("04") + verifying_key.to_string()

                 #Hashes of public key
         sha256_1 = hashlib.sha256(public_key)
         ripemd160 = hashlib.new("ripemd160")
         ripemd160.update(sha256_1.digest())

                 #Adding prefix to identify Network
         hashed_public_key = bytes.fromhex("00") + ripemd160.digest()

                 #Checksum calculation
         checksum_full = hashlib.sha256(hashlib.sha256(hashed_public_key).digest()).digest()
         checksum = checksum_full[:4]

                 #Adding checksum to hashpubkey         
         bin_addr = hashed_public_key + checksum

                 #Encoding to address
         address = str(base58.b58encode(bin_addr))
         final_address = address[2:-1]

         print(final_address)

         with open("my_addresses.txt", "a") as i:
            i.write(final_address)
...