在 PHP 中验证以太坊 (Web3) 签名的消息

Fil*_*p Š 3 php digital-signature ethereum web3-donotuse

如何使用 PHP 验证以太坊签名的消息?

使用web3.personal.signWeb3.js 中的函数对消息进行签名,然后将签名发送到服务器。我如何用PHP验证它?

是否有一些预先构建的软件包(在 Packagist 上),还是我应该从头开始?是否可以在不连接到 RPC 节点或链(链外)的情况下执行此操作?

我已经在 Ethereum StackExchange 上发现了一些关于这个的问题,但它非常复杂而且有点旧,所以我想知道是否有更新更好的解决方案。

我也在GitHub 上找到了一些包,但我不知道它是否适用于web3.personal.sign.

我找到的一些链接:

Fil*_*p Š 7

使用包php-ecrecover可以验证签名消息。

您可以使用此包获取原始邮件地址,然后验证它是否与预期地址相同。

JS标志:

let message = 'Hello World!'
let address = web3.eth.coinbase

web3.personal.sign(web3.fromUtf8(message), address, console.log);
Run Code Online (Sandbox Code Playgroud)

PHP验证:

$address = '0xe12Aa5FB5659bb0DB3f488e29701fE303bcBAf65';
$message = 'Hello World!';
$signed = '0x2cb6b41177a5e6690ebbc61f182758fcf8f54403edcb848fc1089a772227d55163804b4dc7fcf72d15f0d977d741f6dd6bcc4fc4c74916378afcad06be77b2101b';

if ($address == personal_ecRecover($message, $signed)) {
    echo 'Message verified';
} else {
    echo 'Message not verified';
}
Run Code Online (Sandbox Code Playgroud)