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

  • QuickNode
  • 发布于 2024-05-14 21:26
  • 阅读 17

这篇文章深入介绍了如何使用 PHP 生成新的以太坊地址,详细阐述了以太坊地址的概念、生成原理及步骤,包括相关的 PHP 代码示例。此外,还提供了 PHP 的基本信息及其安装依赖的指导,适合希望使用 PHP 进行区块链开发的开发者。

概述

PHP在开发网站或Web应用的后端方面非常受欢迎。很多开发者信任PHP,将其作为首选语言。在本指南中,我们将看到如何在PHP中生成新的以太坊地址。

先决条件

  • 已安装PHP 7.0或更高版本,并且带有gmp扩展。

  • 已安装Composer

  • 一个文本编辑器

  • CLI

什么是以太坊地址?

在互联网上登录任何平台时,你需要使用凭据的组合进行身份验证。将以太坊地址视为你的用户名,对应的私钥视为密码。你的以太坊地址是公开的,可以分享,而私钥必须始终保密。使用这种组合,可以与以太坊区块链互动。以太坊地址是在区块链上的身份,它看起来像这样:“0x6E0d01A76C3Cf4288372a29124A26D4353EE51BE”。拥有有效的以太坊地址是必须的,具体用于:

  • 接收/发送以太币

  • 签名/发送交易

  • 连接到去中心化应用程序

以太坊地址的生成方式:

首先生成一个64个字符(十六进制)的随机私钥(256位 / 32字节)。例如:

0xf4a2b939592564feb35ab10a8e04f6f2fe0943579fb3c9c33505298978b74893

然后,从生成的私钥派生出一个128个字符(64字节)的公钥,使用椭圆曲线数字签名算法(ECDSA)。例如:

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)的支持,使得n层开发首次成为可能。

PHP的日常使用案例

  • 设置和访问cookie变量。
  • 从网页表单收集信息。
  • 执行系统功能,如打开和关闭文件。
  • 在数据库中添加、删除和修改元素。
  • 在网页上添加基于用户的限制。

以下是PHP的一些特性

  • 可扩展性

  • 灵活性

  • 简单性

  • 区分大小写

  • 类型松散

  • 解释型

  • 开源

安装PHP及其他依赖项

在安装生成地址所需的依赖项之前,让我们检查系统中是否已安装PHP。为此,请在终端/cmd中复制粘贴并运行以下命令。

$ php -v

它应该返回PHP版本;如果未安装,请按照官方PHP网站下载页面中的说明下载特定于操作系统的PHP。

我们需要安装PHP gmp扩展;你可以从php.ini文件中取消注释,或使用以下命令手动安装。

$ 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库/依赖项。通过在终端/cmd中运行以下命令来检查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: 无法生成私钥。-> ' . 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   保存但不要分享此(私钥): " . $wallet_private_key;
echo "\r\n   地址: " . $wallet_address . " \n";
?>

上述代码的解释

第1行:以PHP开头标记启动PHP脚本。

第3-8行:导入已安装的依赖项。

第10-20行:使用secp256k1曲线生成私钥。

第22行:生成私钥。

第24-25行:获取公钥。

第29-31行:将密钥转换为椭圆曲线私钥格式,然后转为ASN1结构。

第33-36行:以十六进制格式获取私钥和公钥。

第38-39行:从公钥派生以太坊地址,每个公钥总是以0x04开头,去掉开头的0x04以正确进行哈希。

第41行:获取地址的哈希格式。

第43行:添加0x前缀并获取地址哈希的最后40个字符,并将其存储在wallet_address变量中。

第44行:为私钥添加0x前缀并将其存储在wallet_private_key变量中。

第46行:打印私钥并给出警告。

第47行:打印以太坊地址,并附加字符串“地址:”

现在保存文件并运行脚本。

$ php Address.php

如果一切按计划进行,它应该看起来像这样。

结论

恭喜你在PHP中生成了你自己的以太坊地址;你可以使用它来制作出色的去中心化钱包。

订阅我们的资讯通讯,获取更多关于以太坊的文章和指南。如果你有任何反馈,请通过Twitter与我们联系。你也可以随时在我们的Discord社区服务器上与我们聊天,这里聚集了一些你见过的最酷的开发者 :)

  • 原文链接: quicknode.com/guides/eth...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
QuickNode
QuickNode
江湖只有他的大名,没有他的介绍。