最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

當前位置:主頁 > 區(qū)塊鏈 > 區(qū)塊鏈技術(shù) > 以太坊地址知識分享

以太坊地址是怎么來的 以太坊地址生成過程

2021-03-30 10:28:05 | 來源:區(qū)塊天眼 | 作者:佚名
這篇文章主要介紹了以太坊地址是怎么來的?以太坊地址生成過程,地址的生成的流程是:私鑰 -> 公鑰 -> 地址。因此地址的生成需要三步:1、生成一個隨機的私鑰(32字節(jié))2、通過私鑰生成公鑰(64字節(jié))3、通過公鑰得到地址(20字節(jié)),具體的內(nèi)容請大家參考內(nèi)容吧!

以太坊地址是怎么來的 以太坊地址生成過程

以太坊地址是怎么來的

以私鑰為原材料

  生成私鑰的過程依賴于偽隨機數(shù)生成器(PRNG)和足夠大的熵。關(guān)于私鑰,最重要的一點是,它是從 1 到 2²⁵⁶-1 的范圍內(nèi)隨機選出的整數(shù)。只要是在這個范圍內(nèi)的數(shù),都可以用作私鑰。

以太坊地址是怎么來的 以太坊地址生成過程

  既然我們已經(jīng)初步學習了私鑰背后的數(shù)學知識,接下來就可以自己生成有效的私鑰了(譯者注:教育目的,可跟隨作者的思路學習,但不推薦自己生成。)。我們不妨將私鑰生成過程想象成一個長達 78 位的水平數(shù)字組合鎖(其可能組合數(shù)量恰好等于 2²⁵⁶-1),然后我們把這個密碼鎖分成 3 排,每排有 26 位。你可以把 PRNG 函數(shù)想象成一個會隨機打亂數(shù)字,打亂出一個數(shù)字組合的東西:一開始每一位都是 0,然后毫無章法地在每一位上選出一個具體的數(shù)字。假設(shè)我們使用 PRNG 函數(shù)生成亂序的數(shù)字組合,得到以下三排數(shù)字:

  (1) 04406941321102621719184878;

  (2) 43014596507006094171646853;

  (3) 06780198554267270848908554;

以太坊地址是怎么來的 以太坊地址生成過程

  - 瀏覽器使用 Web Cryptography API (提供 Crypto.getRandomValues(32) 之類的密碼學原語,或者等價的 32 字節(jié)緩沖區(qū))作為 PRNG。這個 PRNG 使用你的計算機熵源 作為隨機種子來生成隨機數(shù)。在生成隨機數(shù)的時候,請一定要使用電子熵源,因為一些研究表明,人類比較不擅長選擇隨機數(shù)字(人自己選出來的數(shù)字是有模式的,到不到偽隨機的要求) -

  恭喜!你現(xiàn)在已經(jīng)是私鑰

  44069413211026217191848784301459650700609417164685306780198554267270848908554 的所有者了。

  我們可以使用這個私鑰生成一個比特幣或以太坊地址,或者任何以 1 至 2²⁵⁶-1 為私鑰范圍的區(qū)塊鏈的地址。

  要根據(jù)這個私鑰生成一個以太坊地址,我們需要使用橢圓曲線點乘算法(需要一篇專門的文章才能講清楚)。因此,簡單起見,我們會把它交給計算機處理。為此,我們需要把這個私鑰“告訴”計算機。麻煩的是,計算機不會處理十進制形式的信息,它只能理解二進制代碼。目前,我們的只有十進制數(shù)形式的私鑰。因此,我們先要將這個私鑰從十進制數(shù)形式轉(zhuǎn)換為計算機可以理解的比特(bit,也譯成 “位” 或 “位元”)和字節(jié)(byte,一個字節(jié)等于 8 個比特)。

  位和字節(jié)

  在進行下一步操作之前,我們需要先了解什么是比特和字節(jié)。任何數(shù)字設(shè)備都只能理解由 0 和 1 組成的信息,通常被稱為比特。比特就是“二進制數(shù)字”,即,僅使用 1 和 0 表示的數(shù)字。雖然我們的智能手機和電腦都可以顯示漢字和圖片,還能播放歌曲,它們最終都是比特來表示并處理這些信息的。位越多,表示的信息越大,但說到底無非是一堆 0 和 1 而已。

  根據(jù)上下文,多個位可以表示字符(如,在使用 ASCII 編碼時,字母 a 的定義就是 01100001)或數(shù)字(01100001 也可以用來表示十進制數(shù) 97)。在將十進制整數(shù)轉(zhuǎn)換為二進制形式時,就是將其轉(zhuǎn)換成以 2 為底數(shù)的冪之和,其中每個冪的指數(shù)遞增。例如,我們通常采用十進制形式記數(shù),十進制數(shù)就是以 10 為底數(shù)的冪之和。因此,在使用二進制時,在 2 的N 次冪以內(nèi)的整數(shù),我們就可以用 n 個位來表示和存儲。

以太坊地址是怎么來的 以太坊地址生成過程

  - 8 位電子游戲機最高能夠表達的十進制數(shù)是 255,因為它們使用的中央處理單元(CPU)最多只能執(zhí)行 8 位操作(譯者注:上圖的左邊解釋了為什么 N 個位就可以表示 2 的 N 次冪以內(nèi)的數(shù) -- 因為其數(shù)字組合有 2 的 N 次冪種可能性;右邊則演示了一個二進 制數(shù)意味著多大的整數(shù),即相互轉(zhuǎn)換的計算規(guī)則 -

  雖然我們可以使用二進制形式來表達任何數(shù)字,但是二進制形式過于“繁冗”。如果要表示 97,我們需要 8 個二進制數(shù)字。二進制數(shù)對于計算機來說很容易處理,但是不方便人類閱讀。因此,計算機通常會使用十六進制而非二進制來表示數(shù)據(jù):位置數(shù)字系統(tǒng)以 16 為底數(shù)來表示數(shù)字。一位十六進制數(shù)可表示四位二進制數(shù)。我們可以用十六進制數(shù) 61 來表示二進制數(shù) 01100001 或十進制數(shù) 97,這樣就比二進制少了 6 位數(shù)。十六進制數(shù)使用 ABCDEF 來表示 10 至 15,通常用來縮小數(shù)據(jù)。

  私鑰有多少個比特?

  再說回私鑰,我們知道私鑰的范圍是 1 至 2²⁵⁶-1。我們該如何用位來表示它?需要用到多少位?如上文所述,在將十進制整數(shù)轉(zhuǎn)換為二進制形式時,就是將其轉(zhuǎn)換成以 2 為底數(shù)的冪之和。在使用 8 位二進制數(shù)時,我們能表示的最大的數(shù)是 2⁷ + 2⁶ + 2⁵ + 2⁴ + 2³ + 2² + 2¹ + 2⁰,即,整數(shù) 255。我們可以看出,要表達 2^n 以內(nèi)的數(shù),我們就需要 n 個位。由此可推得,我們需要 256 位,或者說 32 字節(jié)(256/8),來表示我們的私鑰。

以太坊地址是怎么來的 以太坊地址生成過程

  - 十六進制數(shù)據(jù)表示旨在減少表示數(shù)字所需的位數(shù)。但是,計算機依然只能使用二進制來處理數(shù)據(jù) -

  如果我們一致同意需要使用 32 字節(jié)來表示我們在 [1, 2²⁵⁶-1] 范圍內(nèi)的私鑰,那么在十六進制形式下,我們需要 64 個數(shù)來表示私鑰。現(xiàn)在,我們可以將原始私鑰

  44069413211026217191848784301459650700609417164685306780198554267270848908554

  轉(zhuǎn)換成十六進制形式:

  616E6769652E6A6A706572657A616775696E6167612E6574682E6C696E6B0D0A

  看到十六進制私鑰中多出的字母 A、B、C、D、E 了嗎?看到這些字母,我們就可以輕易辨別出這個數(shù)是十六進制的。

  從私鑰到公鑰

  現(xiàn)在,我們可以把這個十六進制私鑰告訴我們的計算機了。我們可以使用 JavaScript 之類的編程語言輕松導(dǎo)入這個十六進制私鑰,以便用于之后的乘法運算。在以下代碼中,之前得到的十六進制數(shù)被導(dǎo)入作為私鑰(“sk”是 secret_key 的縮寫,是密碼學中的標準記法)。這個十六進制數(shù)是以 16 為底數(shù)的。

以太坊地址是怎么來的 以太坊地址生成過程

  - 通過使用 BigNumber 庫,我們可以確保轉(zhuǎn)換過程中不會丟失任何小數(shù)。這些數(shù)字通常會被表達成指數(shù)(例如,4.406941321102622e+76),而且如果我們直接將其解析成十六進制,就會失去精度。如果不使用 BigNumber 庫,我們得到的十六進制私鑰就會變成

  616e6769652e6c00000000000000000000000000000000000000000000000000 -

  導(dǎo)入私鑰之后,下一步就是創(chuàng)建公鑰。你可能還記得,我們在第一篇文章中提到過,在獲取以太坊地址之前,我們先要通過私鑰來生成公鑰。根據(jù)以太坊黃皮書所述,公鑰生成過程遵循的是標準的 ECDSA 公鑰生成算法,其中,我們將私鑰乘以生成器點得到一個坐標,將該坐標的 x 值和 y 值前后拼在一起就是公鑰。我們的公鑰(在密碼學中記為“pk”)可以用來生成我們的以太坊地址。

以太坊地址是怎么來的 以太坊地址生成過程

  - x 和 y 是使用橢圓曲線上的點乘以我們的私鑰(sk)得到的。雖然私鑰可以在任意區(qū)塊鏈中作為一個地址的唯一生成器,以 太坊專門使用橢圓曲線 secp256k1 生成公鑰;因此,私鑰的簽名操作也跟這條曲線有關(guān) -

  終于到了最后一步。有了公鑰,我們就執(zhí)行黃皮書中的最后一個操作:

  給定某個私鑰,以太坊地址 A 是對應(yīng) ECDSA 公鑰的 Keccak 哈希值的最右邊 160 位。

  鑒于我們已經(jīng)有了自己的 ECDSA 公鑰,剩下的唯一一件事是在我們的公鑰上執(zhí)行 Keccak 哈希函數(shù),取結(jié)果最右邊的 160 位。當我們將這些操作結(jié)果存儲在“緩沖區(qū)”(就好像存儲信息的小盒子)時,我們可以“丟掉”(切片)前 24 個十六進制數(shù),只留下后 40 個十六進制數(shù),或者更準確地說,20 個字節(jié)(這就是以太坊地址的長度)。

以太坊地址是怎么來的 以太坊地址生成過程

  - 以太坊地址被設(shè)計為 20 個字節(jié)。有人認為刪掉一些字節(jié)(具體來說是 12 個字節(jié))可能會引起碰撞,導(dǎo)致兩個私鑰生成相同的以太坊地址。不過到目前為止,還沒發(fā)生過這種情況 -

  你的個人專屬錢包

  如你所見,只要一個數(shù)(雖然很長)就可以生成一個以太坊地址來存儲各類資產(chǎn):從代表虛擬貓、磁帶、襪子和門票等物品的 NFT 到具有增值潛力的密碼學資產(chǎn)等等。你的以太坊地址是公開的,而且像你的家庭住址一樣,但是只能通過鑰匙打開。如果你不想自己來處理所有這些流程,你可以在 Portis 上注冊一個賬戶。Portis 會自動為你創(chuàng)建私鑰(這個私鑰只有你知道,因為它采用的是端到端加密架構(gòu))以及對應(yīng)的以太坊地址,供你在 100 多個 dApp 中使用。

以太坊地址生成過程

以太坊地址生成過程如下:

1、生成 256 位隨機數(shù)作為私鑰。

2、將私鑰轉(zhuǎn)化為 secp256k1 非壓縮格式的公鑰,即 512 位的公鑰。

3、使用散列算法 Keccak256 計算公鑰的哈希值,轉(zhuǎn)化為十六進制字符串。

4、取十六進制字符串的后 40 個字母,開頭加上 0x 作為地址。
 

以太坊地址生成實例

生成以太坊地址過程實例數(shù)據(jù):

私鑰:1f2b77e3a4b50120692912c94b204540ad44404386b10c615786a7efaa065d20

公鑰:04dfa13518ff965498743f3a01439dd86bc34ff9969c7a3f0430bbf8865734252953c9884af787b2cadd45f92dff2b81e21cfdf98873e492e5fdc07e9eb67ca74d

地址:0xabcd68033A72978C1084E2d44D1Fa06DdC4A2d57
 

生成隨機數(shù)作為私鑰

生成 256 位隨機數(shù):

>>> import random
>>> r = random.randint(0, 2**256)
>>> r
14098500174935566811277058424286341448580475958153633347646702637404947635488
>>> r.to_bytes(32, byteorder='big').hex()
'1f2b77e3a4b50120692912c94b204540ad44404386b10c615786a7efaa065d20'

私鑰生成公鑰

以太坊使用的橢圓曲線算法為 secp256k1,從私鑰生成對應(yīng)的公鑰有兩種方法:比特幣工具 bx 和 secp256k1-py 包。

使用 bx 工具生成公鑰

Mac 用戶可以使用 brew 安裝 bx 工具:

$ brew install bx

以 1f2b77e3a4b50120692912c94b204540ad44404386b10c615786a7efaa065d20 作為私鑰,然后使用 bx 工具將私鑰轉(zhuǎn)化為 secp256k1 的非壓縮格式公鑰:

$ bx ec-to-public 1f2b77e3a4b50120692912c94b204540ad44404386b10c615786a7efaa065d20 -u
04dfa13518ff965498743f3a01439dd86bc34ff9969c7a3f0430bbf8865734252953c9884af787b2cadd45f92dff2b81e21cfdf98873e492e5fdc07e9eb67ca74d

使用 secp256k1-py 包生成公鑰

使用 pip 安裝:

$ pip install secp256k1

之后將私鑰轉(zhuǎn)化為公鑰:

>>> import secp256k1
>>> private_key = '1f2b77e3a4b50120692912c94b204540ad44404386b10c615786a7efaa065d20'
>>> private_key = bytes.fromhex(private_key)
>>> privkey = secp256k1.PrivateKey(private_key)
>>> privkey.pubkey.serialize(compressed=False).hex()
'04dfa13518ff965498743f3a01439dd86bc34ff9969c7a3f0430bbf8865734252953c9884af787b2cadd45f92dff2b81e21cfdf98873e492e5fdc07e9eb67ca74d'

計算公鑰哈希值

要使用 keccak256 哈希算法,可以使用 PyCryptodome 工具,使用 pip 進行安裝:

$ pip install pycryptodome

公鑰開頭去除 04,將剩余部分轉(zhuǎn)化為字節(jié)串并使用 keccak256 算法進行哈希:

>>> from Crypto.Hash import keccak
>>> keccak_hash = keccak.new(digest_bits=256)
>>> public_key = '04dfa13518ff965498743f3a01439dd86bc34ff9969c7a3f0430bbf8865734252953c9884af787b2cadd45f92dff2b81e21cfdf98873e492e5fdc07e9eb67ca74d'[2:]
>>> public_key = bytes.fromhex(public_key)
>>> keccak_hash.update(public_key)
<Crypto.Hash.keccak.Keccak_Hash object at 0x102960588>
>>> keccak_hash.hexdigest()
'39c0eb3b26d4838930b1f34babcd68033a72978c1084e2d44d1fa06ddc4a2d57'

得到地址

取哈希值十六進制字符串后 40 個字母,開頭加上 0x 生成最終的以太坊地址:

>>> '0x' + '39c0eb3b26d4838930b1f34babcd68033a72978c1084e2d44d1fa06ddc4a2d57'[-40:]
'0xabcd68033a72978c1084e2d44d1fa06ddc4a2d57'

以太坊地址生成 Python3 實現(xiàn)

使用 Python3 實現(xiàn)以太坊地址生成:

import secp256k1
from Crypto.Hash import keccak

def get_eth_addr(private_key_str=None):
    if private_key_str is None:
        private_key = secp256k1.PrivateKey()
        private_key_str = private_key.serialize()
    else:
        private_key_bytes = bytes.fromhex(private_key_str)
        private_key = secp256k1.PrivateKey(private_key_bytes)
    public_key_bytes = private_key.pubkey.serialize(compressed=False)
    public_key_str = public_key_bytes.hex()
    keccak_hash = keccak.new(digest_bits=256)
    keccak_hash.update(public_key_bytes[1:])
    h = keccak_hash.hexdigest()
    address = '0x' + h[-40:]
    return {
        "private_key": private_key_str,
        "public_key": public_key_str,
        "address": address
    }

參考資料

以太坊在線地址生成工具:可以作為以太坊靚號地址生成工具,代碼開源:https://github.com/bokub/vanity-eth

https://pycryptodome.readthedocs.io/en/latest/src/hash/keccak.html:Keccak python 工具。

https://github.com/ctz/keccak:Python2 環(huán)境下使用的 Keccak,此為源代碼,需要自己 clone 在本地使用。

https://github.com/ludbb/secp256k1-py:secp256k1 的 Python 庫。

以上就是以太坊地址是怎么來的 以太坊地址生成過程的詳細內(nèi)容,更多關(guān)于以太坊地址知識分享的資料請關(guān)注腳本之家其它相關(guān)文章!

免責聲明:本文只為提供市場訊息,所有內(nèi)容及觀點僅供參考,不構(gòu)成投資建議,不代表本站觀點和立場。投資者應(yīng)自行決策與交易,對投資者交易形成的直接或間接損失,作者及本站將不承擔任何責任。!

你可能感興趣的文章

幣圈快訊

  • 加密基金Translunar創(chuàng)始人因逃稅獲刑37個月涉隱瞞700萬美元收入

    2026-07-29 00:18
    加密投資基金TranslunarCryptoLP創(chuàng)始人JustinRyanSchmidt因逃稅案被美國法院判處37個月監(jiān)禁。美國司法部表示,現(xiàn)年46歲的Schmidt于今年在美國得克薩斯州奧斯汀聯(lián)邦法院認罪,他被指控在2020年至2022年間虛報收入,申報收入不足5000美元,但檢方稱其實際通過基金業(yè)務(wù)在2019年至2022年期間獲得超過700萬美元收入。據(jù)悉,Schmidt于2017年創(chuàng)立Translunar,主要投資區(qū)塊鏈初創(chuàng)企業(yè),資金主要來自美國得州奧斯汀和科羅拉多州阿斯彭地區(qū)投資者。美國國稅局刑事調(diào)查部門于2026年2月23日將其逮捕,此后一直被拘押。
  • BitwiseCIO:未來五年利率決策對比特幣的影響將小于過去十五年

    2026-07-29 00:16
    Bitwise首席投資官MattHougan發(fā)帖稱,未來五年利率決策對比特幣的影響將小于過去十五年。他表示,比特幣誕生以來利率曾在0%至2.5%、0%至5%及3.5%之間大幅波動,變化以整個百分點計,但未來的調(diào)整幅度可能更溫和,CME預(yù)期未來一年利率僅上升50個基點。 MattHougan判斷,Warsh領(lǐng)導(dǎo)下的美聯(lián)儲可能更接近上世紀90年代中期格林斯潘時期的小幅微調(diào)風格,而非近年伯南克與鮑威爾時期的模式。若果真如此,由于利率變動的幅度更小,其對比特幣的影響也會隨之減弱,利率仍然重要,但其他因素的權(quán)重將上升。
  • Web3融合消費平臺Beezie完成400萬美元融資Psalion參投

    2026-07-29 00:03
    據(jù)DealRoom報道,Web3融合消費平臺Beezie宣布完成400萬美元融資,Psalion通過旗下早期基金PsalionVCFundIII參投。該平臺可實物商品生成鏈上數(shù)字孿生,使其具備可編程、可交易及跨場景組合能力,通過游戲化機制將實物資產(chǎn)交易轉(zhuǎn)化為互動消費體驗,新資金將用于全球市場擴張。
  • 交易員Beaumont平倉美光空單盈利近300萬美元轉(zhuǎn)而做空英偉達

    2026-07-29 00:01
    7月28日,據(jù)鏈上分析師Ai姨監(jiān)測,交易員「Beaumont」的兩個地址在過去半小時平空止盈總頭寸達2895萬美元的美光空單,累計獲利295.3萬美元。隨后其開啟2倍杠桿2941.7萬美元英偉達空單,開倉均價193.15美元。
  • 以媒:調(diào)解方認為美伊接近重啟諒解備忘錄

    2026-07-29 00:00
    7月28日,據(jù)以色列時報報道,一位阿拉伯官員和另一位消息人士透露,在周二以色列總理內(nèi)塔尼亞胡與美國總統(tǒng)特朗普會晤之前,調(diào)解方認為他們已接近達成突破性協(xié)議,有望重啟美國與伊朗上個月簽署的諒解備忘錄。然而,這些調(diào)解方仍在等待特朗普與以色列領(lǐng)導(dǎo)人會晤后作出的最終決定。巴基斯坦、埃及和卡塔爾方面周一晚間表示,他們正在討論一項提案,旨在澄清有關(guān)霍爾木茲海峽運營問題的分歧。伊朗方面堅持認為,該諒解備忘錄賦予了其對海峽的一定控制權(quán),而美國則持不同意見。調(diào)解方提出的方案旨在彌合這些分歧,使美國和伊朗能夠通過該備忘錄展開會談,該備忘錄的60天期限將于下月到期。伊朗和阿曼已批準了調(diào)解方的提議,目前該提案正等待特朗普的批準。兩位消息人士表示,白宮暫未做出決定,要等到特朗普與內(nèi)塔尼亞胡會面之后才會作出最終決定。
  • 查看更多
更多

熱門幣種

  • 幣種
    最新價格
    24H漲跌幅
  • bitcoin BTC 比特幣

    BTC

    比特幣

    $ 63913.7¥ 432548.74
    -1.05%
  • ethereum ETH 以太坊

    ETH

    以太坊

    $ 1919.13¥ 12988.09
    -0.48%
  • tether USDT 泰達幣

    USDT

    泰達幣

    $ 0.999¥ 6.7609
    +0.02%
  • binance-coin BNB 幣安幣

    BNB

    幣安幣

    $ 573.16¥ 3878.97
    +0.78%
  • usdc USDC USD Coin

    USDC

    USD Coin

    $ 1.0008¥ 6.7731
    -0.01%
  • ripple XRP 瑞波幣

    XRP

    瑞波幣

    $ 1.0648¥ 7.2062
    -2.06%
  • solana SOL Solana

    SOL

    Solana

    $ 74.2877¥ 502.75
    -1.45%
  • tron TRX 波場

    TRX

    波場

    $ 0.3244¥ 2.1954
    -1.34%
  • hyperliquid HYPE Hyperliquid

    HYPE

    Hyperliquid

    $ 55.2814¥ 374.12
    -3.82%
  • dogecoin DOGE 狗狗幣

    DOGE

    狗狗幣

    $ 0.070808¥ 0.4792
    -0.95%
舟山市| 凤阳县| 永定县| 西宁市| 孝感市| 黎川县| 祁连县| 雅安市| 南城县| 巴南区| 共和县| 山丹县| 微博| 赫章县| 斗六市| 海城市| 合肥市| 罗源县| 大丰市| 霍邱县| 横峰县| 海晏县| 池州市| 彝良县| 五指山市| 成武县| 大庆市| 鸡东县| 许昌市| 南靖县| 平果县| 吴桥县| 曲水县| 勐海县| 西盟| 仲巴县| 延庆县| 万州区| 华阴市| 星座| 临高县|