跳至主要內容

如何在 PHP 中產生一個新的以太坊地址

更新於
2025年11月26日

閱讀時間 5 分鐘

概覽

PHP 在開發網站或網路應用程式的後端方面非常流行。有大量開發者信賴 PHP,並將其視為首選語言。在本指南中,我們將探討如何在 PHP 中生成一個新的以太坊地址。

先決條件

  • 已安裝 PHP 7.0 或更高版本,並啟用 gmp 擴充套件。
  • 已安裝 Composer
  • 文字編輯器
  • CLI

什麼是以太坊地址?

當您登入任何網路平台時,都需要透過一組憑證來進行身分驗證。不妨將以太坊地址視為您的使用者名稱,而對應的私鑰則視為密碼。雖然您的以太坊地址是公開的且可以分享,但私鑰必須始終保密。透過這組組合,您便能與以太坊區塊鏈進行互動。 以太坊地址是您在區塊鏈上的身分識別,其格式如下:「0x6E0d01A76C3Cf4288372a29124A26D4353EE51BE」。擁有有效的以太坊地址是以下情況的必要條件:

  • 接收/發送以太幣
  • 簽署/發送交易
  • 連線至去中心化應用程式

以太坊地址是如何生成的:

首先會產生一個由 64 個字元(十六進位)組成的隨機私密金鑰(256 位元/32 位元組)。例如:

0xf4a2b939592564feb35ab10a8e04f6f2fe0943579fb3c9c33505298978b74893

接著,會利用橢圓曲線數位簽章演算法(ECDSA),從生成的私鑰推導出一個 128(十六進位)字元(64 位元組)的公鑰。例如:

0x04345f1a86ebf24a6dbeff80f6a2a574d46efaa3ad3988de94aa68b695f09db9ddca37439f99548da0a1fe4acf4721a945a599a5d789c18a06b20349e803fdbbe

接著,將 (128 個字元 / 64 位元組) 的公鑰套用Keccak-256雜湊函數,以獲得一個 64 個字元 (32 位元組) 的雜湊字串。此字串的最後 40 個字元 / 20 位元組,加上前綴 0x,即成為最終的以太坊地址。例如:

0xd5e099c71b797516c10ed0f0d895f429c2781142

:程式碼中的 0x 表示該數字/字串是以十六進位制書寫的。

什麼是 PHP?

PHP是「Hypertext Preprocessor」的遞迴縮寫;PHP 是一種廣泛使用的開源伺服器端腳本語言,通常嵌入在 HTML 中。 它用於管理資料庫、會話追蹤及動態內容;可與幾乎所有常見的資料庫(如 MySQL、PostgreSQL、MS SQL Server 等)配合使用。其語法類似於 C 語言,並支援 LDAP、IMAP 和 POP3 等重要通訊協定。PHP4 新增了對 Java 以及分散式物件架構(COM 和 CORBA)的支援,首次實現了多層次開發。

**
PHP 的日常應用案例
**

  • 設定及存取 Cookie 變數。
  • 從網頁表單中收集資訊。
  • 用於執行系統功能,例如開啟和關閉檔案。
  • 在資料庫中新增、刪除及修改元素。
  • 在網頁上新增基於使用者的限制。

**
以下是 PHP 的一些特點
**

  • 可擴展性
  • 靈活性
  • 簡約
  • 區分大小寫
  • 鬆散類型化
  • 口譯
  • 開源

安裝 PHP 及其他依賴項

在安裝生成地址所需的依賴項之前,讓我們先檢查系統上是否已安裝 PHP。要進行此檢查,請將以下內容複製貼上並在終端機/命令提示字元中執行。

$ php -v

此指令應會顯示 PHP 版本;若未安裝,請依照PHP 官方網站下載頁面的指示,下載適用於該作業系統的 PHP 版本。

我們需要安裝 PHP 的 gmp 擴充套件;您可以透過在 php.init 檔案中取消註解來啟用它,或者依照以下步驟手動安裝。

$ sudo apt-get install php-gmp

注意:我們應僅採用上述方法中的一種來啟用 gmp。 

適用於 Mac:

使用 brew 重新安裝 PHP 有助於啟用 gmp 擴充套件,請輸入以下指令:

$ brew reinstall php@7.2
$ export PATH="/usr/local/opt/php@7.2/bin:$PATH"
$ brew services restart php@7.2
$ php -info | grep "GMP"

我們將使用 Composer(一款 PHP 依賴項管理工具)來管理生成地址和金鑰所需的 PHP 函式庫/依賴項。請在終端機/命令提示字元中執行以下指令,檢查您的系統是否已安裝 Composer:

若尚未安裝,請參照Composer 網站的下載頁面進行下載與安裝。

現在請在您的專案目錄中建立一個名為 composer.json 的 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"
}
}

儲存檔案,並使用 Composer 安裝依賴項:

$ composer install

這將在該目錄中安裝所需的依賴項。

在 PHP 中產生以太坊地址

現在請在該目錄中建立一個名為 Address.php 的新 PHP 檔案,並將以下內容複製並貼上至該檔案中。

<?

require_once "vendor/autoload.";

use Sop\CryptoTypes\Asymmetric\EC\ECPublicKey;
use Sop\CryptoTypes\Asymmetric\EC\ECPrivateKey;
use Sop\CryptoEncoding\PEM;
use kornrunner\Keccak;

$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;
}

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);

$ec_priv_seq = $ec_priv_key->toASN1();

$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;

$pub_key_hex_2 = substr($pub_key_hex, 2);
$pub_key_len_2 = strlen($pub_key_hex_2) / 2;

$hash = Keccak::hash(hex2bin($pub_key_hex_2), 256);

$wallet_address = '0x' . substr($hash, -40);
$wallet_private_key = '0x' . $priv_key_hex;

echo "\r\n SAVE BUT DO NOT SHARE THIS (Private Key): " . $wallet_private_key;
echo "\r\n Address: " . $wallet_address . " \n";
?>

上述程式碼的說明

第 1 行:以 PHP 開啟標籤開始 PHP 腳本。

第 3-8 行:匯入已安裝的依賴項。

第 10-20 行:使用 secp256k1 曲線來產生私鑰。

第 22 行:產生私鑰。

第 24-25 行:取得公鑰。

第 29 至 31 行:將金鑰轉換為橢圓曲線私鑰格式,然後再轉換為 ASN.1 結構。

第 33 至 36 行:取得以十六進位格式表示的私鑰與公鑰。

第 38-39 行:根據公鑰推導以太坊地址,每個公鑰總是以 0x04 開頭,

移除開頭的 0x04,以便正確進行雜湊運算。

第 41 行:取得以雜湊格式呈現的位址。

第 43 行:在位址雜湊值前加上 0x 前綴,並擷取其最後 40 個字元,然後將其儲存至 wallet_address 變數中。

第 44 行:在私鑰前加上 0x 前綴,並將其儲存至 wallet_private_key 變數中。

第 46 行:在顯示私密金鑰時附上警告訊息。

第 47 行:將以太坊地址連同字串「Address:」一起輸出

現在請儲存檔案並執行該腳本。

$ php Address.php

如果一切按計畫進行,結果應該會是這樣。

結論

恭喜您成功在 PHP 中生成專屬的以太坊地址;您可以利用這個地址來打造出色的去中心化錢包。

訂閱我們的電子報,獲取更多關於以太坊的文章與指南。如有任何意見回饋,歡迎透過Twitter 聯絡我們。您隨時都可以在我們的Discord社群伺服器上與我們聊天,那裡聚集了您這輩子見過最酷的開發者們 :)

分享這份指南