# How to Generate an Ethereum Address Using Python

By [mberk](https://paragraph.com/@mberk-2) · 2024-06-08

---

Creating an Ethereum address involves a series of cryptographic operations. In this article, we will explore how to generate a random Ethereum wallet (address, public key, and private key) locally on your console using a script in Python.

This script uses the `eth_account` and `secrets` libraries to generate a random private key and derive an Ethereum account from this private key. It saves the account information in a file named ethereum\_wallet.txt in the same directory.

For those who want direct and detailed access to the code, you can visit GitHub for setup instructions.

First, you will need `Python 3.x` and the `eth_account` library for this code.

![](https://storage.googleapis.com/papyrus_images/75ce53408dba6e49265da1181991121e93a72115b9d0036e46dd2206595bcaa7.png)

**Generating a Private Key**
----------------------------

A private key is a 256-bit (32-byte) number generated randomly and is typically represented in hexadecimal format (64 characters). This key allows you to sign transactions and access your funds.

Use a cryptographically secure random number generator to create a 256-bit number.

    import secrets 
    from eth_account import Account
    
    #Generate a random private key 
    private_key = secrets.token_hex(32) 
    private_key_hex = "0x" + private_key 
    print(f'Private Key: {private_key_hex}') 
    

The `secrets` library is used to generate cryptographically secure random numbers, which is crucial for generating private keys. We use the secrets library to minimize security vulnerabilities when generating random numbers. It is designed to create unpredictable and secure keys.

The line `private_key_hex = "0x" + private_key` adds the "0x" prefix to indicate that the number is represented in hexadecimal format.

**Generating a Public Key and Ethereum Address**
------------------------------------------------

The public key and Ethereum address are derived from the private key. The public key is used to verify transactions.

Generate a public key from the private key and hash the public key to create an Ethereum address.

    from eth_account import Account
    
    #Create an account from the private key
    account = Account.from_key(private_key_hex)
    
    #Get the public key and ETH address
    public_key = account._key_obj.public_key 
    compressed_public_key = "0x" + public_key.to_compressed_bytes().hex()
    print(f'Public Key: {compressed_public_key}') 
    print(f'Ethereum Address: {account.address}') 
    

Saving Information to a File (Optional)
---------------------------------------

You can save the generated private key, public key, and Ethereum address to a .txt file. Note: Storing private keys digitally is dangerous.

Steps: Write the information to a .txt file in the specified format.

    #Write information to a .txt file (optional)
    
    with open("ethereum_wallet.txt", "w") as file: 
      file.write(f"Address: {account.address}\n") 
      file.write(f"Public: {compressed_public_key}\n") 
      file.write(f"Private: {private_key_hex}\n")
    print("Ethereum wallet information saved to ethereum_wallet.txt") 
    
    
    #Notes: Keep your private key secure and never share it. If this key is lost or compromised, you can lose access to your funds.
    

The 256-bit private key results in 2^256 possible combinations. Cracking such a large number is practically impossible. Even with the most powerful supercomputers available today, trying all possible combinations would take longer than the lifespan of the universe.

In this example, we used the `eth_account` library to generate an Ethereum address. However, users can also perform these steps using basic cryptographic operations. For instance, you can manually generate the public key and address using the `ecdsa` and `sha3` libraries without relying on `eth_account`.

_\*In my next article, we will discuss where Mnemonic or Seed Phrases fit into the process._

_\*This is a trial article; for errors, suggestions, and questions, please reach out on_ [_x.com/mberketh_](http://x.com/mberketh)

\*[cover source](https://ethereum.org/_next/image/?url=%2F_next%2Fstatic%2Fmedia%2Fhero.94a1ecc4.png&w=1920&q=75)

---

*Originally published on [mberk](https://paragraph.com/@mberk-2/how-to-generate-an-ethereum-address-using-python)*
