Dapps

使用乙太坊密鑰對簽名和驗證消息

  • May 30, 2021

使用乙太坊密鑰對簽署和驗證消息有哪些庫?我嘗試了 Ethersjs,但它似乎只支持簽名(不驗證)。我需要在 React Native dapp 上使用 lib。驗證將是鏈下的。

您可以使用web3.js(1.2.x 或 1.3.x)。

簽名留言

web3.eth.accounts.sign(data, privateKey);

數據帶有前綴,以使無法簽署交易:

作為數據參數傳遞的值將被 UTF-8 HEX 解碼和包裝,如下所示:“\x19Ethereum 簽名消息:\n”+ message.length + message。

文件中的範例:

web3.eth.accounts.sign('Some data', '0x4c0883a69102937d6231471b5dbb6204fe5129617082792ae468d01a3f362318');
> { //returns the signature object with the relevant information
   message: 'Some data',
   messageHash: '0x1da44b586eb0729ff70a73c326926f6ed5a25f5b056e7f47fbc6e58d86871655',
   v: '0x1c',
   r: '0xb91467e570a6466aa9e9876cbcd013baba02900b8979d43fe208a4a4f339f5fd',
   s: '0x6007e74cd82e037b800186422fc2da167c747ef045e5d18a5f5d4300f8e1a029',
   signature: '0xb91467e570a6466aa9e9876cbcd013baba02900b8979d43fe208a4a4f339f5fd6007e74cd82e037b800186422fc2da167c747ef045e5d18a5f5d4300f8e1a0291c'
}

驗證消息

web3.eth.accounts.recover(signatureObject);

包括signatureObject

messageHash - String: The hash of the given message already prefixed with "\x19Ethereum Signed Message:\n" + message.length + message.
r - String: First 32 bytes of the signature
s - String: Next 32 bytes of the signature
v - String: Recovery value + 27

文件中的範例:

web3.eth.accounts.recover({
   messageHash: '0x1da44b586eb0729ff70a73c326926f6ed5a25f5b056e7f47fbc6e58d86871655',
   v: '0x1c',
   r: '0xb91467e570a6466aa9e9876cbcd013baba02900b8979d43fe208a4a4f339f5fd',
   s: '0x6007e74cd82e037b800186422fc2da167c747ef045e5d18a5f5d4300f8e1a029'
})
> "0x2c7536E3605D9C16a7a3D7b1898e529396a65c23" //returns the signer address

recover功能也可以通過這種方式使用(有關更多資訊,請參閱文件):

web3.eth.accounts.recover(message, signature [, preFixed]);
web3.eth.accounts.recover(message, v, r, s [, preFixed]);

引用自:https://ethereum.stackexchange.com/questions/99319