簡體   English   中英

從文件文本轉換比特幣私鑰 - 逐行

[英]Convert Bitcoin private key from file text - line by line

我開始學習 Python 以成功完成下面的項目,但我需要幫助。

我有一些舊錢包的比特幣/萊特幣私鑰。 我很確定這些地址是空的,但是在我刪除這個舊文件之前,我想將這些不同的私鑰轉換為公共地址以檢查是否全部為空。 我會使用在線服務一次檢查這些地址(有些允許控制多達 50 個地址)。

我知道,我可以將每個私鑰一一導入錢包中,但我的計算機上沒有更多的比特幣核心,我不想安裝一個新的只是為了檢查我的地址。

經過大量研究,我有這個功能代碼:

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 次,因此我的 output 文件包含從我的第一個私鑰生成的 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 錯了??

預先感謝您的幫助。

您在濫用 readline() 這只會返回一行。

但是,您可以僅使用 for 循環遍歷文件中的行,

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM