J'essaie d'apprendre comment créer une adresse bitcoin en suivant les instructions suivantes ce guide . Si vous faites défiler vers le bas, la première étape, l'étape 0, est d'avoir une clé ECDSA de 256 bits (64 hex). J'ai regardé dans Python Cryptography et j'utilise le code ci-dessous pour tester la génération de clés, mais la clé enregistrée est toujours une longue (180 caractères) chaîne en base 64.
J'ai essayé de lire la documentation et de regarder les fonctions que j'appelle sur Github, mais je ne vois pas où je peux spécifier la longueur de la clé. À la ligne 216 de ce fichier il est dit que la taille de la clé pour secp256k1 est de 256 bits par défaut. Cela signifie-t-il que je l'exporte mal ?
Alternativement, j'ai envisagé de générer une chaîne hexadécimale aléatoire de 64 caractères dans l'intervalle secp256k1,( 0x1
a 0xFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE BAAE DCE6 AF48 A03B BFD2 5E8C D036 4140
), mais je ne vois pas où je peux créer une instance de clé privée à partir d'une chaîne ou d'une valeur hexadécimale.
gentest.py
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives.asymmetric import ec
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives.serialization import load_pem_private_key
def gen_key():
private_key = ec.generate_private_key(
ec.SECP256K1(), default_backend()
)
return private_key
def save_key(pk, filename):
pem = pk.private_bytes(
encoding=serialization.Encoding.PEM,
format=serialization.PrivateFormat.PKCS8,
encryption_algorithm=serialization.NoEncryption()
)
with open(filename, 'wb') as pem_out:
pem_out.write(pem)
def load_key(filename):
with open(filename, 'rb') as pem_in:
pemlines = pem_in.read()
private_key = load_pem_private_key(pemlines, None, default_backend())
return private_key
if __name__ == '__main__':
pk = gen_key()
filename = 'privkey.pem'
save_key(pk, filename)
pk2 = load_key(filename)
privkey.pem
-----BEGIN PRIVATE KEY-----
MIGEAgEAMBAGByqGSM49AgEGBSuBBAAKBG0wawIBAQQgQGh8om7IuKSTW637ZQug
SZQHUTv/yQzmM+KxGi1bg0ehRANCAATALLpDeKtfHxEnrgazJUu2z2/esSfzF5bj
Z4B/IBBB9uYHyMtjY8hS926bpXiWql7y7MMZXDSDD/zYWELuJZ1U
-----END PRIVATE KEY-----