跳转至主要内容

如何在 PHP 中生成一个新的以太坊地址

更新于
2025年11月26日

阅读时间 5 分钟

概述

PHP 在网站或 Web 应用程序的后端开发中非常流行。有大量开发者信赖 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社区服务器上与我们交流,那里聚集了您能遇到的最酷的开发者们 :)

分享本指南