Ich habe ein einfaches SHA3-Python-Skript erstellt, um Ethereum-Adressen und priv/pub-Schlüssel zu generieren. Danach habe ich etwas ETH an diese Adressen geschickt, aber dann festgestellt, dass die Privatschlüssel nicht mit den Adressen übereinstimmen, die ich habe. Ich glaube, ich habe das Verhalten der Update-Methode in der Implementierung von Python keccak_256 missverstanden. Habe ich immer noch die Möglichkeit, private Schlüssel für die Adressen zu erhalten, die ich mit diesem Skript erhalten habe?
from ecdsa import SigningKey, SECP256k1
import sha3, sys
n = 5
full_file = "addresses.txt"
keccak = sha3.keccak_256()
with open(full_file, "r") as f:
for i in range(n):
priv = SigningKey.generate(curve=SECP256k1)
pub = priv.get_verifying_key().to_string()
keccak.update(pub)
address = keccak.hexdigest()[24:]
print address
pr_key = str(priv.to_string().hex())
pub_key = str(pub.hex())
address_str = "0x" + address
f.write(address_str + " " + pr_key + " " + pub_key + "\n")
Danke
Es scheint, dass das, was Sie getan haben, fast funktioniert. Ich habe gerade deinen Code-Schnipsel etwas abgeändert:
from ecdsa import SigningKey, SECP256k1
import sha3, sys
n = 5
full_file = "addresses.txt"
keccak = sha3.keccak_256()
with open(full_file, "w") as f:
f.write("address | private key\n")
f.write("---------------------------------------------------------------------------------------------------------------\n")
for i in range(n):
priv = SigningKey.generate(curve=SECP256k1)
pub = priv.get_verifying_key().to_string()
keccak.update(pub)
address = keccak.hexdigest()[24:]
pr_key = str(priv.to_string().hex())
pub_key = str(pub.hex())
f.write("0x" + address + " | " + "0x" + pr_key + "\n")
Wenn ich den öffentlichen und den privaten Schlüssel mit dem obigen Skript generiere und die Ausgabe der Web3js-Funktion web3.eth.accounts.privateKeyToAccount(privateKey)
mit dem entsprechenden privaten Schlüssel als Eingabe überprüfe, erhalte ich den öffentlichen Schlüssel wie erwartet. Es gab nur zwei Dinge, die ich korrigieren musste:
full_file
muss als beschreibbar ( "w"
) nicht lesbar ( "r"
) geöffnet werden.0x
-Prefix genauso wie die Adresse (das ist der öffentliche Schlüssel ...)Ich hoffe es hilft.
privateKeyToAccount
Funktion überprüft. Und der öffentliche Schlüssel, den ich erhalten habe, stimmte mit dem richtigen öffentlichen Schlüssel überein. Der erste private Schlüssel der ausgegebenen Datei ergibt also den ersten öffentlichen Schlüssel der Datei.
Schnitzer