在 PHP 中验证以太坊 (Web3) 签名消息
Verifying Ethereum (Web3) signed message in PHP
如何使用 PHP 验证以太坊签名消息?
使用 Web3.js 中的 web3.personal.sign
函数对消息进行签名,然后将签名发送到服务器。我如何用 PHP 验证它?
是否有一些预构建的包(在 Packagist 上)或者我应该从头开始做?是否可以在不连接到 RPC 节点或链(链下)的情况下执行此操作?
我已经在 Ethereum StackExchange 上找到了 some question about this,但是它非常复杂而且有点旧,所以我想知道是否有更新更好的解决方案。
我也找到了 some package on GitHub,但我不知道它是否适用于 web3.personal.sign
。
我找到的一些链接:
可以使用包 php-ecrecover 验证签名的消息。
您可以使用此包获取原始消息地址,然后验证它是否与预期地址相同。
JS 签名:
let message = 'Hello World!'
let address = web3.eth.coinbase
web3.personal.sign(web3.fromUtf8(message), address, console.log);
PHP 验证:
$address = '0xe12Aa5FB5659bb0DB3f488e29701fE303bcBAf65';
$message = 'Hello World!';
$signed = '0x2cb6b41177a5e6690ebbc61f182758fcf8f54403edcb848fc1089a772227d55163804b4dc7fcf72d15f0d977d741f6dd6bcc4fc4c74916378afcad06be77b2101b';
if ($address == personal_ecRecover($message, $signed)) {
echo 'Message verified';
} else {
echo 'Message not verified';
}
如何使用 PHP 验证以太坊签名消息?
使用 Web3.js 中的 web3.personal.sign
函数对消息进行签名,然后将签名发送到服务器。我如何用 PHP 验证它?
是否有一些预构建的包(在 Packagist 上)或者我应该从头开始做?是否可以在不连接到 RPC 节点或链(链下)的情况下执行此操作?
我已经在 Ethereum StackExchange 上找到了 some question about this,但是它非常复杂而且有点旧,所以我想知道是否有更新更好的解决方案。
我也找到了 some package on GitHub,但我不知道它是否适用于 web3.personal.sign
。
我找到的一些链接:
可以使用包 php-ecrecover 验证签名的消息。
您可以使用此包获取原始消息地址,然后验证它是否与预期地址相同。
JS 签名:
let message = 'Hello World!'
let address = web3.eth.coinbase
web3.personal.sign(web3.fromUtf8(message), address, console.log);
PHP 验证:
$address = '0xe12Aa5FB5659bb0DB3f488e29701fE303bcBAf65';
$message = 'Hello World!';
$signed = '0x2cb6b41177a5e6690ebbc61f182758fcf8f54403edcb848fc1089a772227d55163804b4dc7fcf72d15f0d977d741f6dd6bcc4fc4c74916378afcad06be77b2101b';
if ($address == personal_ecRecover($message, $signed)) {
echo 'Message verified';
} else {
echo 'Message not verified';
}