2017-03-08 4 views
0

私はアルゴリズム - Pythonの

s1 = scrypt(key=(passphrase||0x1), salt=(salt||0x1), N=2^18, r=8, p=1, dkLen=32) 

s2 = pbkdf2(key=(passphrase||0x2), salt=(salt||0x2), c=2^16, dkLen=32, prf=HMAC_SHA256) 

keypair = generate_bitcoin_keypair(s1 ⊕ s2) 

(ダブルパイプは、パスフレーズには0x1または0x2のを追加することを意味する)はPython

にこのアルゴリズムを再現しようとしたと私は、この作られた:

s1 = pyscrypt.hash(password=phrase+'\x01', salt=saltPhrase+'\x01', N=16, r=8, p=1, dkLen=32) 

s2 = pbkdf2(phrase+'\x02', saltPhrase+'\x02', 1, keylen=32, prf='hmac-sha256') 

newWallet = BitcoinKeypair.from_passphrase(''.join(chr(ord(a)^ord(b)) for a,b in zip(s1,s2))) 

問題は、それがこの

bitcoin address: 1HvAip4QGWqPJoh8nxLmRAXtbuVj9AKGHq 

Wif: 5Kd3D34oALv33x7RMAPrrsNtidZjQekdWHXWGXW6cs2SnRkKUR2 
0を生成するので、それが正常に動作しないということです

が、正しい出力はこれです:

bitcoin address: 1MGKWPZEqJh9JzCPYYsKFEo9w8E2GXmzA7 

Wif: 5KXwsERJKvUZde3qHboJFz1gF6B15Xt7TB22bRWoGzgN3FHxqyR 

誰かが私を助けることができますか?ありがとう。

ここで全体のコードがあります:これは私が推測するところである、WarpWalletの実装のように見える

pip install pyscrypt passlib coinkit 
+0

どのように正しく動作しないか説明してください。 –

答えて

1

http://pastebin.com/QL0tQ83v


は、あなたがこれらのライブラリをインストールする必要があり、このスクリプトを使用するにはあなたはあなたの "正しい"値を得ています。あなたには2つの問題があります。

まずBitcoinKeypair.from_passphraseはパスフレーズからキーを生成しますが、すでにキーを自分で生成しているので、あなたはこれを、あなたは必要としないだけで、あなたが持っているキーを使用することができます(あなたがhexlifyを使用するbinasciiをインポートする必要があります) :

# xor the two subkeys as before. 
key = ''.join(chr(ord(a)^ord(b)) for a,b in zip(s1,s2)) 
# Convert to a hex string first (coinkit/pybitcoin expects hex 
# rather than raw bytes). 
key_hex = hexlify(key) 
# Create the keypair. 
newWallet = BitcoinKeypair(key_hex) 

(またBitcoinKeypairは、おそらくあなたがpybitcoinとBitcoinPrivateKeyBitcoinPublicKeyに移行を検討すべきである、現在推奨されるように表示されます)。

第2に、両方のkdfsの職場の要因が消えています。 scryptの場合は2^18(あなたは16)、pbkdf2の場合は2^16(1つ)でなければなりません。

ここWarpWalletページと同じ結果になりますバージョンは(pyscrypt私は反復回数を固定したときに私のラップトップのメモリ全体を食べたいと、私は、ここではなくpyscryptscryptを使用しています注意してください)です。

s1 = scrypt.hash(password=phrase+'\x01', salt=saltPhrase+'\x01', N=1<<18, r=8, p=1, buflen=32) 
s2 = pbkdf2(phrase+'\x02', saltPhrase+'\x02', 1<<16, keylen=32, prf='hmac-sha256') 

key = ''.join(chr(ord(a)^ord(b)) for a,b in zip(s1,s2)) 
key_hex = hexlify(key) 
newWallet = BitcoinKeypair(key_hex) 
関連する問題