Wallets

是否有一個簡單的乙太坊地址生成器,只包含私鑰和公鑰?

  • November 12, 2019

我可以去https://www.bitaddress.org/,將他們的軟體下載到我的系統,斷開我的系統與 Internet 的連接,然後將滑鼠隨機移動到他們的頁面上以生成熵,然後得到一個比特幣錢包。單個錢包地址非常簡單,我可以以任何形式隨身攜帶(將其列印到紙上,將其複製到任何設備上的文件中,並以我希望的方式保護它等)

乙太坊是否存在同樣簡單的東西?

我嘗試了https://www.myetherwallet.com/,但我認為它增加了我的複雜性以保護私鑰。例如,首先它迫使我選擇一個用於保護私鑰的密碼。然後生成的錢包看起來很複雜,如下所示:

{
 "version": 3,
 "id": "54f...",
 "address": "46d...",
 "Crypto": {
   "ciphertext": "9c3...",
   "cipherparams": {
     "iv": "ac6..."
   },
   "cipher": "aes-128-ctr",
   "kdf": "scrypt",
   "kdfparams": {
     "dklen": 32,
     "salt": "9c8...",
     "n": 1024,
     "r": 8,
     "p": 1
   },
   "mac": "559..."
 }
}

(注意:我曾經...截斷過長字元串。也別擔心,我不會在任何地方使用這個錢包。)

除了以這種格式保存這個 JSON 文件外,我還需要記住一個額外的密碼。

回到我的問題:是否有任何乙太坊地址生成器可以只給我一個私鑰和一個我可以隨意保護的公鑰?

這將根據您的要求提供一個簡單的乙太坊地址和私鑰。

https://vanity-eth.tk/

輸出:

地址:0x1Ff482D42D8727258A1686102Fa4ba925C46Bc42

私鑰:c6cbd7d76bc5baca530c875663711b947efa6a86a900a9e8645ce32e5821484e

我還沒有審核程式碼。我只將它用於測試和調試目的。

關於主要問題,是的,存在許多選項,其中一些很簡單,例如由 Ian Coleman 主持的先前答案中提到的 BIP39 工具(披露:我是 Github 上該工具的貢獻者),但是,這將產生一個助記符和生成的加密保險庫(使用 BIP39,然後是 BIP32 和 BIP44),而不僅僅是一個私鑰-公鑰對。

同樣,大多數錢包現在使用 BIP32,這是一個層次確定性 (HD) 錢包,它使用擴展的公鑰/私鑰,可以派生多達 20 億個錢包地址(如果使用 BIP44,則每個支持的加密貨幣為 20 億個),而不是生成一個綁定到公鑰/私鑰對的單個地址。

儘管如此,為了主要問題,下面我提供了一個範常式序,它可以在 Python 3 中作為 .py 文件執行,它將生成單個私鑰並派生一個乙太坊地址。

**關於Myetherwallet參考:**您描述的JSON文件是一個AES加密的Keystore,您粘貼的是密文和算法參數,例如鹽和初始化向量(所有這些都需要解密,連同密碼) . 網站在強制您選擇密碼後會像這樣導出它的原因是,您只在設備上保留加密數據,而不是黑客可以竊取的明文。

這是一個可以在 Python 中執行(包括離線)的輕程序範例,它將生成一個加密安全的隨機數(使用秘密庫)來播種私鑰,然後計算公鑰及其 Keccak_256 雜湊以導出乙太坊地址基於該雜湊摘要的尾隨 40 個十六進製字元。請參閱此處以了解有關如何生成乙太坊地址的更多資訊。

eth_keys庫(來自乙太坊基金會)用於以下程序,還包含錯誤檢查以確保私鑰有效,根據secp256k1用於乙太坊的橢圓曲線,以及散列算法 Keccak_256(來自下面的sha3庫)。

import secrets
import sha3
import eth_keys
from eth_keys import keys

private_key = str(hex(secrets.randbits(256))[2:])
private_key_bytes = bytes.fromhex(private_key)
public_key_hex = keys.PrivateKey(private_key_bytes).public_key
public_key_bytes = bytes.fromhex(str(public_key_hex)[2:])
keccak256_of_public_key_bytes = sha3.keccak_256(public_key_bytes).hexdigest()
public_address = keys.PublicKey(public_key_bytes).to_address()
checksum = keys.PublicKey(public_key_bytes).to_checksum_address()

print('\n Private_key:',private_key,
     '\n Private_key_bytes:',private_key_bytes,
     '\n Public_key_hex:',public_key_hex,
     '\n Public_key_bytes:',public_key_bytes,
     '\n Full_Keccak_digest:',keccak256_of_public_key_bytes,
     '\n Ethereum address:',public_address,
     '\n Checksum Format of Above Ethereum:',checksum)

**注意:**許多錢包不支持使用單個私鑰-公鑰對,因為大多數錢包使用 BIP39,它允許使用者為每個受支持的加密貨幣派生多達 20 億個地址。儘管如此,如果您了解風險和便利性/安全性的權衡,擁有一個只控制一個地址的私鑰(與擁有一個控制整個加密保險庫的助記詞相比),那麼它可以在以下產品組合中佔有一席之地加密資產。

此外,在某些網路(如比特幣)中,不應使用此類地址,除非發送的餘額不少於全部餘額,因為缺少返回“更改”地址可能導致差額全部失去(即未發送的剩餘金額)取決於所使用的軟體(這也是大腦錢包不再被廣泛使用的另一個原因)。

引用自:https://ethereum.stackexchange.com/questions/32482