Dapps
使用乙太坊密鑰對簽名和驗證消息
使用乙太坊密鑰對簽署和驗證消息有哪些庫?我嘗試了 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]);