Signature

如何使用 web3 和公鑰解密簽名消息

  • August 21, 2021

我想在伺服器向他發送資訊之前驗證我的使用者。

所以我希望使用者使用他的私鑰簽署消息,然後伺服器解密該簽名以驗證使用者確實是錢包地址的所有者。

所以我在客戶端使用了以下內容

web3.eth.personal.sign

我不確定我可以在伺服器端使用什麼來解密該簽名並驗證原始消息和發件人地址。

謝謝你的提前。

大多數驗證答案都已過時。像下面這樣的東西對我有用。

   var msg = Buffer.from(msgstr);
   const prefix = Buffer.from("\x19Ethereum Signed Message:\n");
   var prefixedMsg = Buffer.concat([prefix, 
   Buffer.from(String(msgstr.length)), msg]);
   
   prefixedMsg = Web3.utils.keccak256(prefixedMsg);
   prefixedMsg = prefixedMsg.substring(2);
   prefixedMsg = Uint8Array.from(Buffer.from(prefixedMsg, 'hex'));
   var pub = ethJsUtil.ecrecover(prefixedMsg , vrs.v, vrs.r, vrs.s);
   var addrBuf = ethJsUtil.pubToAddress(pub);
   var addr = ethJsUtil.bufferToHex(addrBuf);

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