【iOS】以太坊公鑰、地址生成

本文背景導(dǎo)入私鑰生成錢包 (私鑰 => 公鑰 => 地址)
以太坊地址的生成過程如下:
  1. secp256k1曲線生成私鑰,是由32字節(jié)的隨機數(shù)生成
  2. 采用橢圓曲線數(shù)字簽名算法(ECDSA)將私鑰(32字節(jié))映射成公鑰(65字節(jié))。
  3. 公鑰(去掉04后剩下64字節(jié))經(jīng)過Keccak-256單向散列函數(shù)變成了32字節(jié),然后取后20字節(jié)并加上0x作為前綴所得就是ETH地址
公鑰 =>地址
  1. 從公鑰開始(128個字符/ 64個字節(jié))
  2. 使用公鑰的Keccak-256哈希。您現(xiàn)在應(yīng)該有一個64個字符/ 32個字節(jié)的字符串。(注意:SHA3-256最終成為標(biāo)準(zhǔn),但以太坊使用Keccak)
  3. 取這個公鑰的最后40個字符/ 20個字節(jié)(Keccak-256)。或者,換句話說,刪除前24個字符/ 12個字節(jié)。這40個字符/ 20個字節(jié)是地址。當(dāng)前綴為0x時,它變?yōu)?2個字符長。
    NSString *private = @"eef393f053a9e3a05a7a04deb5d49862ba9c043a0cb0d4a931817be6bd933435";
    NSData *privateData = private.my_dataFromHexString;
    
    //獲取公鑰
    NSMutableData *publicKeyData = [[NSMutableData alloc] initWithLength:65];
    ecdsa_get_public_key65(&secp256k1, privateData.bytes, publicKeyData.mutableBytes);
    //045984b7 69b78391 11932745 cb1eb1f3 a19c18fe 0c8cd585 2681173b 3fed97ec 07c9ef76 727a3da4 19d2a658 413626c0 70aaa383 cf29dbc8 54a89fa2 c6128568 19

    //截掉第一個字節(jié)04
    NSData *subPublicKeyData = [publicKeyData subdataWithRange:NSMakeRange(1, publicKeyData.length - 1)];
    
    //SHA3  KECCAK-256 哈希 單向散列函數(shù)變成了32字節(jié)
    NSMutableData *secureData = [[NSMutableData alloc] initWithLength:256 / 8];
    SHA3_CTX context;
    keccak_256_Init(&context);
    keccak_Update(&context, subPublicKeyData.bytes, (size_t)subPublicKeyData.length);
    keccak_Final(&context, secureData.mutableBytes);
    CC_XZEROMEM(&context, sizeof(SHA3_CTX));
    //e75e4fbf 6e739c44 6c454f54 4ccc6fab 6f01ada8 c155ae8e c12e5487 aee5a972

    //刪除前24個字符/ 12個字節(jié) 并拼接0x
    NSData *addressData = [secureData subdataWithRange:NSMakeRange(12, secureData.length - 12)];
   //核查地址中字母大小寫
    Address *addres = [Address addressWithData:addressData];
   //地址:0x4CCC6FaB6f01ADa8C155aE8EC12E5487aeE5a972

demo

相關(guān)

Etherscan API

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 在比特幣中,經(jīng)常出現(xiàn)三個詞:私鑰,公鑰和地址。他們是什么意思呢?他們之間又有什么樣的關(guān)系呢?搞清楚他們之間的關(guān)系和...
    0xSen閱讀 45,974評論 3 48
  • 錢包 - 比特幣開發(fā)指南 原文鏈接: https://bitcoin.org/en/developer-guide...
    terryc007閱讀 3,458評論 0 7
  • 如果拋開工作不談,那么就業(yè)就是在談理想,脫離了軌道談工作的興趣是可恥的,基于責(zé)任工作會認(rèn)真做,完全取決于興趣不就是...
    小覷閱讀 247評論 0 0
  • 人這一生, 最常做的事就是等, 等有錢了,等有空了, 等將來,等以后,等下次, 等來等去, 留下的是遺憾, 錯過的...
    莫夕歸閱讀 2,914評論 6 58
  • 11月24日星期五晴
    平凡張閱讀 1,009評論 0 0

友情鏈接更多精彩內(nèi)容