私はちょうどコーディング初心者のチュートリアルに進みました。このチュートリアルはhttps://www.youtube.com/watch?v=tX-XokHf_nIです。そして私はBitcoinのアドレス/ privkeysを、(暗号ではなく)読みやすい1つのPythonファイルで生成したかったのです。ちょうどコードが書かれているスタイルです。Python 2.7 Bitcoin特権キーをWIF特権キーに変換
チュートリアルでは、 "1"で始まるBitcoinアドレスを取得した部分に到達しましたが、 "5"で始まるプライベートキーは取得しませんでした。私はBIP38が秘密鍵を暗号化する方法(「6」から始まる)を逃しています。これは、Bitcoinのメインネットワークの場合と同様です。
https://en.bitcoin.it/wiki/Wallet_import_formatをチュートリアル後のステップガイドとして使用していました。結局私は自分がすべてそれがゴミだったので自分自身でやろうとしたとコメントしました。 (「SHA256が拡張された秘密鍵を追加した部分が多くのレベルで間違っています」)私は80バイトを秘密鍵に追加した部分が正しいと思います。
PS:静的秘密鍵を使用していますが、これはすべてが機能するまで実行されます。そのため、非静的秘密鍵部分がコメントされています。これは、私が「非静的秘密鍵の使用法」とコメントした部分を介して生成されています。また、署名付きメッセージコード行(コードの最後にあります)は、チュートリアルに表示されているため、キー/アドレスの生成には重要ではないためコメントアウトしました。私はまた、ファイルの一番下にだけ印刷物などを置いて少し違うものをソートしてコードを少し美化しようとしましたが、Python 2.7ではそれが気に入らなかったことが判明しました。
私はPython 2.7を使用していますが、すべて正常にインストールされました。コードは、コメントアウトされた部分で現在のように動作しています。チュートリアルのアップローダーのように、bitaddress.orgで印刷した結果を確認しました。解決策を見つけることを試みましたが、私は検索結果から何か役に立つものを得ることができませんでした。
コードが欠落していてもお役に立てれば幸いです。また、コード内で何が何をしているのかを説明/コメントすることもできます。特にBIP38 Privkeyパスワードの暗号化がまだ不足している場合だから私は何が何であり、理解できるかを見ることができます。
.pyスクリプトを実行すると、追加した80バイトを除いて有効な結果が返されます。これが正しく行われていれば、アイデアはありません。 80バイトを追加することは、最後の秘密鍵を "5"で始めるために必要なステップです。それは印刷し実行
:私はチュートリアルに従って可能性があるのでここで
This is my Private Key: 29a59e66fe370e901174a1b8296d31998da5588c7e0dba860f11d65a3adf2736
This is my 80 Byte Private Key: 8029a59e66fe370e901174a1b8296d31998da5588c7e0dba860f11d65a3adf2736
This is my Public Key: 04d370b77a4cf0078ab9e0ba3c9e78e8dd87cc047fa58d751b3719daa29ac7fbf2c3ba8338f9a08f60a74a5d3a2d10f26afa2f703b8c430eecad89d59a9df00ec5
This is my Bitcoin Address: 1B3wS8dQHtfMpFMSmtT5Fy4kHCYvxejtVo
あなたは私のコードを見ることができますが、良いとしてあちこちのコメント: (「これは私のハッシュ化された内線privのあるコメントアウトし忘れました混乱のため申し訳ありませんキーのチェックサム」の部分は、これは私が今、助けを必要とするコードです。)あなたはおそらくBitcoin Wiki's段階から誤解何
import os
import ecdsa
import hashlib
import base58
## STATIC KEY USAGE
private_key_static = "29a59e66fe370e901174a1b8296d31998da5588c7e0dba860f11d65a3adf2736"
## PRINTOUT FROM STATIC PRIVATE KEY
print "This is my Private Key: " + private_key_static
## NON STATIC PRIVATE KEY USAGE
#private_key = os.urandom(32).encode("hex")
#print "this is my private key: " + private_key
## 80-BYTE EXTENDED PRIVATE KEY
private_key_plus_80byte = (('80') + private_key_static)
## PRINTOUT 80-BYTE EXTENDED PRIVATE KEY
print "This is my 80 Byte Private Key: " + private_key_plus_80byte
## SHA256 HASHED EXTENDED PRIVATE KEY
## THIS IS WRONG ON SO MANY LEVELS
#hashed_ext_priv_key_checksum = hashlib.sha256(hashlib.sha256(private_key_plus_80byte).digest()).digest()[:4]
#hashed_ext_priv_key_checksum = hashed_ext_priv_key_checksum.decode("hex")
#print "This is my hashed ext priv key checksum: " + hashed_ext_priv_key_checksum
## PRIVATE! SIGNING KEY ECDSA.SECP256k1
sk = ecdsa.SigningKey.from_string(private_key_static.decode("hex"),
curve = ecdsa.SECP256k1)
## PUBLIC! VERIFYING KEY (64 BYTE LONG, MISSING 04 BYTE AT THE BEGINNING)
vk = sk.verifying_key
## PUBLIC KEY
public_key = ('\04' + vk.to_string()).encode("hex")
## PRINTOUT PUBLIC KEY
print "This is my Public Key: " + public_key
## PUBLIC KEY ENCODING (2x RIPEMD160)
ripemd160 = hashlib.new('ripemd160')
ripemd160.update(hashlib.sha256(public_key.decode('hex')).digest())
middle_man = ('\00') + ripemd160.digest()
checksum = hashlib.sha256(hashlib.sha256(middle_man).digest()).digest()[:4]
binary_addr = middle_man + checksum
addr = base58.b58encode(binary_addr)
print "This is my Bitcoin Address: " + addr
## MESSAGE CONTENT
#msg = "hello world"
## SIGN MESSAGE CONTENT
#signed_msg = sk.sign(msg)
## VERIFY MESSAGE CONTENT
#assert vk.verify(signed_msg, "hello world")
## PRINTOUT SIGNED MESSAGE ENCODED TO HEX
#print "This is a HEX encoded signed Message: " + signed_msg.encode("hex")
良い詳細@BloodyPythonNewbie!サイトへようこそ。ただのヒント - それの背後にある個人的なストーリーなしで質問を読む方が簡単です。質問内容自体に影響を与えないいくつかの文章を削除しました。あなたはすぐにいくつかの答えを得ることを願って:) – viraptor
ありがとう!実際にあなたが編集したのと同じように、私はそれを1つの読みやすさと謎めいたファイルではない部分として削除したようです。ちょうど今のように! :) 私が理解しているコード行の助けが必要でしょうか。ネット上に本当に隠されたPythonコードをたくさん見ましたが、それを使用していません。ちょうどこのコードのように私を助けるのに最高でしょう! – BloodyPythonNewbie