这篇文章深入介绍了如何使用 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是超文本预处理器(Hypertext Preprocessor)的递归缩写;PHP是一种广泛使用的开源服务器端脚本语言,通常嵌入在HTML中。它用于管理数据库、会话跟踪、动态内容;它能与几乎所有流行的数据库(如MySQL、PostgreSQL、MS SQL Server等)协同工作。它有类似C语言的语法,并支持重要协议如LDAP、IMAP和POP3。PHP4增加了对Java和分布式对象架构(COM和CORBA)的支持,使得n层开发首次成为可能。
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
这将在目录中安装所需的依赖项。
现在在目录中创建一个名为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 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!