{"id":134,"date":"2024-10-20T21:19:39","date_gmt":"2024-10-21T00:19:39","guid":{"rendered":"https:\/\/solidchain.ar\/?p=134"},"modified":"2025-07-26T15:09:59","modified_gmt":"2025-07-26T18:09:59","slug":"generador-de-direcciones-ethereum-a-partir-de-una-clave-privada-con-python","status":"publish","type":"post","link":"https:\/\/solidchain.ar\/index.php\/2024\/10\/20\/generador-de-direcciones-ethereum-a-partir-de-una-clave-privada-con-python\/","title":{"rendered":"Generador de Direcciones Ethereum a Partir de una Clave Privada con Python"},"content":{"rendered":"\n<h3 class=\"wp-block-heading\">Introducci\u00f3n<\/h3>\n\n\n\n<p>En el mundo de las criptomonedas, la generaci\u00f3n de claves privadas y direcciones p\u00fablicas es uno de los primeros pasos que los desarrolladores y usuarios deben realizar para interactuar con redes blockchain como Ethereum. En este art\u00edculo, presentamos una aplicaci\u00f3n sencilla desarrollada en Python utilizando las librer\u00edas <code>secp256k1<\/code>, <code>eth_account<\/code> y <code>Tkinter<\/code> para crear una interfaz gr\u00e1fica de usuario (GUI) que genera una direcci\u00f3n de Ethereum a partir de una clave privada.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Librer\u00edas Utilizadas<\/h3>\n\n\n\n<p>El c\u00f3digo hace uso de varias librer\u00edas importantes:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>secp256k1<\/strong>: Una librer\u00eda utilizada para trabajar con criptograf\u00eda de curvas el\u00edpticas, en este caso, para la generaci\u00f3n de claves p\u00fablicas y privadas.<\/li>\n\n\n\n<li><strong>eth_account<\/strong>: Proporciona herramientas para interactuar con cuentas de Ethereum, generando direcciones p\u00fablicas a partir de claves privadas.<\/li>\n\n\n\n<li><strong>Tkinter<\/strong>: La librer\u00eda est\u00e1ndar de Python para crear interfaces gr\u00e1ficas de usuario, que permite a los usuarios interactuar con la aplicaci\u00f3n de manera visual.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Funcionalidad de la Aplicaci\u00f3n<\/h3>\n\n\n\n<p>Esta aplicaci\u00f3n permite a los usuarios generar una direcci\u00f3n p\u00fablica de Ethereum y su clave p\u00fablica asociada, ya sea ingresando una clave privada o generando una de manera aleatoria. La aplicaci\u00f3n consta de una interfaz gr\u00e1fica donde el usuario puede interactuar con diferentes botones y campos de entrada para realizar esta operaci\u00f3n.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Componentes de la Aplicaci\u00f3n<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Clave privada (input)<\/strong>: El usuario puede ingresar una clave privada de 64 caracteres en un campo de texto. Esta clave es verificada antes de ser utilizada para evitar errores.<\/li>\n\n\n\n<li><strong>Clave p\u00fablica (output)<\/strong>: Una vez que se genera la clave p\u00fablica, esta se muestra en el campo correspondiente.<\/li>\n\n\n\n<li><strong>Direcci\u00f3n de Ethereum (output)<\/strong>: Tambi\u00e9n se genera y muestra la direcci\u00f3n de Ethereum derivada de la clave privada.<\/li>\n\n\n\n<li><strong>Generador de clave privada aleatoria<\/strong>: Con un bot\u00f3n, el usuario puede generar una clave privada aleatoria v\u00e1lida, siguiendo las reglas de la curva el\u00edptica <code>secp256k1<\/code> usada por Ethereum.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">C\u00f3digo Explicado<\/h3>\n\n\n\n<p>El c\u00f3digo principal de la aplicaci\u00f3n se puede dividir en dos funciones principales:<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">1. <strong>Funci\u00f3n para generar direcci\u00f3n a partir de una clave privada<\/strong><\/h4>\n\n\n\n<pre class=\"wp-block-preformatted\">pythonCopiar c\u00f3digo<code>def on_button_click():\n    key = entry1.get()  # Obtiene la clave privada ingresada por el usuario\n    if len(key) != 64:\n        messagebox.showerror(\"Error\", \"La clave privada debe tener 64 caracteres\")\n        return\n    # Genera la clave p\u00fablica y la direcci\u00f3n a partir de la clave privada\n    privkey = PrivateKey(bytes(bytearray.fromhex(key)))\n    pubkey_ser_uncompressed = privkey.pubkey.serialize(compressed=False)\n    entry2.delete(0, tk.END)\n    entry2.insert(0, pubkey_ser_uncompressed.hex())\n    \n    # Genera la direcci\u00f3n de Ethereum\n    key = \"0x\" + key\n    acct = Account.from_key(key)\n    entry3.delete(0, tk.END)\n    entry3.insert(0, acct.address)\n<\/code><\/pre>\n\n\n\n<p>Esta funci\u00f3n se ejecuta cuando el usuario hace clic en el bot\u00f3n &#8220;Aceptar&#8221;. Toma la clave privada ingresada por el usuario, genera la clave p\u00fablica utilizando la librer\u00eda <code>secp256k1<\/code>, y muestra tanto la clave p\u00fablica como la direcci\u00f3n de Ethereum en los campos correspondientes.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">2. <strong>Funci\u00f3n para generar clave privada aleatoria<\/strong><\/h4>\n\n\n\n<pre class=\"wp-block-preformatted\">pythonCopiar c\u00f3digo<code>def on_button_random_click():\n    key = random.randint(1, 115792089237316195423570985008687907852837564279074904382605163141518161494337)\n    key = hex(key)[2:].zfill(64)\n    entry1.delete(0, tk.END)\n    entry1.insert(0, key)\n<\/code><\/pre>\n\n\n\n<p>Esta funci\u00f3n permite generar una clave privada aleatoria v\u00e1lida, que luego se muestra en el campo de entrada correspondiente. La clave se genera siguiendo el est\u00e1ndar del protocolo Ethereum, asegurando que est\u00e9 dentro del rango permitido para la curva <code>secp256k1<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Interfaz Gr\u00e1fica<\/h3>\n\n\n\n<p>La interfaz gr\u00e1fica de la aplicaci\u00f3n se construye con Tkinter, que proporciona una ventana simple con campos de entrada para la clave privada, clave p\u00fablica y direcci\u00f3n, as\u00ed como botones para aceptar la clave ingresada o generar una nueva clave aleatoria.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Campos de texto<\/strong>: Los usuarios pueden ingresar o ver informaci\u00f3n sobre las claves y direcciones generadas.<\/li>\n\n\n\n<li><strong>Bot\u00f3n &#8220;Random&#8221;<\/strong>: Genera una clave privada aleatoria y la muestra en el campo correspondiente.<\/li>\n\n\n\n<li><strong>Bot\u00f3n &#8220;Aceptar&#8221;<\/strong>: Toma la clave privada ingresada, genera la clave p\u00fablica y direcci\u00f3n de Ethereum, y las muestra en pantalla.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Conclusi\u00f3n<\/h3>\n\n\n\n<p>Este proyecto es un excelente punto de partida para cualquiera que quiera entender el proceso de generaci\u00f3n de claves y direcciones en Ethereum, mientras explora el uso de interfaces gr\u00e1ficas con Tkinter en Python. A partir de esta base, se podr\u00edan a\u00f1adir funcionalidades como la validaci\u00f3n de direcciones, la firma de mensajes o transacciones, o incluso la conexi\u00f3n con una blockchain real para interactuar con contratos inteligentes.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introducci\u00f3n En el mundo de las criptomonedas, la generaci\u00f3n de claves privadas y direcciones p\u00fablicas [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":136,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[2,3,12],"tags":[],"class_list":["post-134","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blockchain","category-criptografia","category-proyectos"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/solidchain.ar\/index.php\/wp-json\/wp\/v2\/posts\/134","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/solidchain.ar\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/solidchain.ar\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/solidchain.ar\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/solidchain.ar\/index.php\/wp-json\/wp\/v2\/comments?post=134"}],"version-history":[{"count":1,"href":"https:\/\/solidchain.ar\/index.php\/wp-json\/wp\/v2\/posts\/134\/revisions"}],"predecessor-version":[{"id":135,"href":"https:\/\/solidchain.ar\/index.php\/wp-json\/wp\/v2\/posts\/134\/revisions\/135"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/solidchain.ar\/index.php\/wp-json\/wp\/v2\/media\/136"}],"wp:attachment":[{"href":"https:\/\/solidchain.ar\/index.php\/wp-json\/wp\/v2\/media?parent=134"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/solidchain.ar\/index.php\/wp-json\/wp\/v2\/categories?post=134"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/solidchain.ar\/index.php\/wp-json\/wp\/v2\/tags?post=134"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}