摘要:本文將提供有關如何生成私鑰的指南,然后使用導出到以太坊錢包地址。為了獲得以太坊錢包地址的正確哈希值,我們需要刪除前導。以太坊,主要講解如何使用開發(fā)基于的以太坊應用,包括賬戶管理狀態(tài)與交易智能合約開發(fā)與交互過濾器和交易等。
本文將提供有關如何生成ECDSA私鑰的指南,然后使用PHP7.0++導出到以太坊錢包地址。
你可以找到以下工作實現(xiàn):
composer.json
{ "require": { "sop/asn1": "^3.3", "sop/crypto-encoding": "^0.2.0", "sop/crypto-types": "^0.2.1", "kornrunner/keccak": "^1.0", "symfony/dotenv": "^4.0", "sc0vu/web3.php": "dev-master" } }
GenerateEthereumWallet.php
OPENSSL_KEYTYPE_EC, "curve_name" => "secp256k1" ]; $res = openssl_pkey_new($config); if (!$res) { echo "ERROR: Fail to generate private key. -> " . openssl_error_string(); exit; } // 生成私鑰 openssl_pkey_export($res, $priv_key); // 獲取公鑰 $key_detail = openssl_pkey_get_details($res); $pub_key = $key_detail["key"]; $priv_pem = PEM::fromString($priv_key); // 轉換為橢圓曲線私鑰格式 $ec_priv_key = ECPrivateKey::fromPEM($priv_pem); // 然后將其轉換為ASN1結構 $ec_priv_seq = $ec_priv_key->toASN1(); // HEX中的私鑰和公鑰 $priv_key_hex = bin2hex($ec_priv_seq->at(1)->asOctetString()->string()); $priv_key_len = strlen($priv_key_hex) / 2; $pub_key_hex = bin2hex($ec_priv_seq->at(3)->asTagged()->asExplicit()->asBitString()->string()); $pub_key_len = strlen($pub_key_hex) / 2; // 從公鑰導出以太坊地址 // 每個EC公鑰始終以0x04開頭, // 我們需要刪除前導0x04才能正確hash它 $pub_key_hex_2 = substr($pub_key_hex, 2); $pub_key_len_2 = strlen($pub_key_hex_2) / 2; // Hash $hash = Keccak::hash(hex2bin($pub_key_hex_2), 256); // 以太坊地址長度為20個字節(jié)。 (40個十六進制字符長) // 我們只需要最后20個字節(jié)作為以太坊地址 $wallet_address = "0x" . substr($hash, -40); $wallet_private_key = "0x" . $priv_key_hex; echo " ETH Wallet Address: " . $wallet_address; echo " Private Key: " . $wallet_private_key;代碼條件
該代碼需要PHP 7.0++,OpenSSL擴展和PHP Composer。需要使用PHP Composer來安裝第三方軟件包。
$ composer install生成私鑰
以太坊標準是使用secp256k1曲線生成私鑰。在我的教程中,我使用OpenSSL函數(shù)生成PEM格式的橢圓曲線私鑰,如下所示:
$config = [ "private_key_type" => OPENSSL_KEYTYPE_EC, "curve_name" => "secp256k1" ]; $res = openssl_pkey_new($config); if (!$res) { echo "ERROR: Fail to generate private key. -> " . openssl_error_string(); exit; } // Generate Private Key openssl_pkey_export($res, $priv_key); // PEM Format $priv_pem = PEM::fromString($priv_key);
之后我需要將私鑰轉換為ASN1序列,下面是ANS1序列的結構。
ECPrivateKey ::= SEQUENCE { version INTEGER { ecPrivkeyVer1(1) } (ecPrivkeyVer1), privateKey OCTET STRING, parameters [0] ECParameters {{ NamedCurve }} OPTIONAL, publicKey [1] BIT STRING OPTIONAL }
下面的代碼是我如何從ANS1序列結構中查詢十六進制字符串中的公鑰和私鑰。
// Then convert it to ASN1 Structure $ec_priv_seq = $ec_priv_key->toASN1(); // Private Key & Public Key in HEX $priv_key_hex = bin2hex($ec_priv_seq->at(1)->asOctetString()->string()); $priv_key_len = strlen($priv_key_hex) / 2; $pub_key_hex = bin2hex($ec_priv_seq->at(3)->asTagged()->asExplicit()->asBitString()->string()); $pub_key_len = strlen($pub_key_hex) / 2;衍生以太坊錢包地址
以太坊錢包地址來自公鑰。每個EC公鑰始終以0x04開頭。為了獲得以太坊錢包地址的正確哈希值,我們需要刪除前導0x04。
$pub_key_hex_2 = substr($pub_key_hex, 2); $pub_key_len_2 = strlen($pub_key_hex_2) / 2;
我們繼續(xù)使用EC公鑰的Keccak256哈希。 以太坊錢包地址長度為20個字節(jié),長度為40個字符,因此我們只需要哈希數(shù)據的最后20個字節(jié)。
$hash = Keccak::hash(hex2bin($pub_key_hex_2), 256); $wallet_address = "0x" . substr($hash, -40); $wallet_private_key = "0x" . $priv_key_hex;
現(xiàn)在你有$wallter_address**存儲你新生成的以太坊錢包地址,**$wallet_private_key是你以太坊錢包地址的私鑰。
如何運行代碼$ php GenerateEthereumWallet.php
它將輸出以太坊錢包地址及其私鑰,如下所示:
ETH Wallet Address: 0xb2... Private Key: 0x73...
======================================================================
分享一些以太坊、EOS、比特幣等區(qū)塊鏈相關的交互式在線編程實戰(zhàn)教程:
php以太坊,主要是介紹使用php進行智能合約開發(fā)交互,進行賬號創(chuàng)建、交易、轉賬、代幣開發(fā)以及過濾器和交易等內容。
php比特幣開發(fā)教程,本課程面向初學者,內容即涵蓋比特幣的核心概念,例如區(qū)塊鏈存儲、去中心化共識機制、密鑰與腳本、交易與UTXO等,同時也詳細講解如何在Php代碼中集成比特幣支持功能,例如創(chuàng)建地址、管理錢包、構造裸交易等,是Php工程師不可多得的比特幣開發(fā)學習課程。
python以太坊,主要是針對python工程師使用web3.py進行區(qū)塊鏈以太坊開發(fā)的詳解。
java以太坊開發(fā)教程,主要是針對java和android程序員進行區(qū)塊鏈以太坊開發(fā)的web3j詳解。
以太坊入門教程,主要介紹智能合約與dapp應用開發(fā),適合入門。
以太坊開發(fā)進階教程,主要是介紹使用node.js、mongodb、區(qū)塊鏈、ipfs實現(xiàn)去中心化電商DApp實戰(zhàn),適合進階。
C#以太坊,主要講解如何使用C#開發(fā)基于.Net的以太坊應用,包括賬戶管理、狀態(tài)與交易、智能合約開發(fā)與交互、過濾器和交易等。
EOS教程,本課程幫助你快速入門EOS區(qū)塊鏈去中心化應用的開發(fā),內容涵蓋EOS工具鏈、賬戶與錢包、發(fā)行代幣、智能合約開發(fā)與部署、使用代碼與智能合約交互等核心知識點,最后綜合運用各知識點完成一個便簽DApp的開發(fā)。
java比特幣開發(fā)教程,本課程面向初學者,內容即涵蓋比特幣的核心概念,例如區(qū)塊鏈存儲、去中心化共識機制、密鑰與腳本、交易與UTXO等,同時也詳細講解如何在Java代碼中集成比特幣支持功能,例如創(chuàng)建地址、管理錢包、構造裸交易等,是Java工程師不可多得的比特幣開發(fā)學習課程。
匯智網原創(chuàng)翻譯,轉載請標明出處。這里是原文
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://systransis.cn/yun/29581.html
摘要:本文將提供有關如何生成私鑰的指南,然后使用導出到以太坊錢包地址。為了獲得以太坊錢包地址的正確哈希值,我們需要刪除前導。以太坊,主要講解如何使用開發(fā)基于的以太坊應用,包括賬戶管理狀態(tài)與交易智能合約開發(fā)與交互過濾器和交易等。 本文將提供有關如何生成ECDSA私鑰的指南,然后使用PHP7.0++導出到以太坊錢包地址。 你可以找到以下工作實現(xiàn): composer.json { requ...
摘要:分享一些以太坊比特幣等區(qū)塊鏈相關的交互式在線編程實戰(zhàn)教程以太坊,主要是針對工程師使用進行區(qū)塊鏈以太坊開發(fā)的詳解。這里是原文如何用為以太坊和比特幣生成虛擬地址 今天,我們將編寫一個非常簡單的python腳本來生成虛榮地址,這些地址是以某個短語或字母序列開頭的加密貨幣地址。該過程涉及生成私鑰并檢查目標短語的地址,直到找到滿意的地址。 安裝包 首先,我們需要安裝一些可以執(zhí)行計算的軟件包,以便...
摘要:以太坊,主要講解如何使用開發(fā)基于的以太坊應用,包括賬戶管理狀態(tài)與交易智能合約開發(fā)與交互過濾器和事件等。 Android應用程序以太坊錢包生成,要做的工作不少,不過如果我們一步一步來應該也比較清楚: 1.在app/build.gradle中集成以下依賴項: compile (org.web3j:core-android:2.2.1) web3j核心是用于從服務器下載以太坊區(qū)塊鏈數(shù)據的核心...
摘要:以太坊,主要講解如何使用開發(fā)基于的以太坊應用,包括賬戶管理狀態(tài)與交易智能合約開發(fā)與交互過濾器和事件等。 Android應用程序以太坊錢包生成,要做的工作不少,不過如果我們一步一步來應該也比較清楚: 1.在app/build.gradle中集成以下依賴項: compile (org.web3j:core-android:2.2.1) web3j核心是用于從服務器下載以太坊區(qū)塊鏈數(shù)據的核心...
閱讀 2097·2021-10-08 10:21
閱讀 2490·2021-09-29 09:34
閱讀 3505·2021-09-22 15:51
閱讀 4946·2021-09-22 15:46
閱讀 2324·2021-08-09 13:42
閱讀 3447·2019-08-30 15:52
閱讀 2734·2019-08-29 17:13
閱讀 1564·2019-08-29 11:30