Private-Key

如何導入 64 字節長的私鑰

  • February 10, 2021

根據比特幣維基: https ://en.bitcoin.it/wiki/Private_key,私鑰長度為 256 位(32 字節)

澳大利亞初創公司 Diamond Circle 向我發送了一對比特幣地址及其私鑰。Blockchain.info 顯示錢仍在給定地址中。

問題是私鑰是64 字節長。它是 base-64 編碼的,尾隨 ==

由於它不在 WIF 中,我想知道如何導入它。有人見過 64 位私鑰嗎?

考慮到 64 字節的密鑰可能是 bip32 格式的種子密鑰,您可能需要先派生密鑰。我修改了程式碼以反映這一點

npm install coinstring hdkey
node 
var HDKey = require('hdkey')
var cs = require('coinstring')

// This is your base64 key 
var seed = 'oMQqnDrGq/K6aplGroOvGPUb8cn6fazEySUTzE3QFYNDQcd13NTA+sc1R8VmLYGp6TYaCqxgSnOjIb2RA7zorw=='
var hdkey = HDKey.fromMasterSeed(new Buffer(seed, 'base64'))

var hex = hdkey.privateKey
var version = 0x80; //Bitcoin private key
console.log(cs.encode(hex, version)) 

它應該為您提供熟悉的 WIF 格式私鑰。

5HyfJgfUm7WVgUrLuo9uwtJR6ME7MYfGRhK2aeckZRooSKYGXP8

以下python程式碼應該可以工作。將私鑰轉換為 HEX,並使用它:

import binascii, hashlib
def privateKey_to_WIF(pk): #wallet import format ==> pra importar nas carteiras

   privWIF1 = hashlib.sha256(binascii.unhexlify('80'+pk)).hexdigest()
   privWIF2 = hashlib.sha256(binascii.unhexlify(privWIF1)).hexdigest()
   privWIF3 = '80'+pk+privWIF2[:8]

   pubnum = int(privWIF3,16)
   pubnumlist = []
   while pubnum!=0: pubnumlist.append(pubnum%58); pubnum/=58
   WIF = ''
   for l in ['123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'[x] for x in pubnumlist]:
       WIF=l+WIF
   #print WIF
   return WIF

它將返回可在另一個客戶端中使用的錢包導入格式。

例子:

私鑰 WIF:5KNjwhPMnXbFS7bVeHEzpE4He6jkQeRF9wtBtr1p1anH25rDnys

引用自:https://bitcoin.stackexchange.com/questions/43428