是否可以在 web3j 中 sign/encrypt 一条消息(字符串),然后使用 public 密钥(地址)解密该消息

Is it possible to sign/encrypt a message (string) in web3j and then decrypt the message with the public key (address)

正在尝试找出解决此问题的最佳方法。 在 web3j/ethereum 应用程序上工作,我需要一种方法来验证地址是否已由服务器生成并由应用程序用户使用。 我的方法思路:

  1. 使用以太坊私钥 sign/encrypt 一条消息
  2. 发送加密消息(例如"abc")和以太坊地址到服务器
  3. 服务器使用发送的以太坊地址解密消息
  4. 检查消息是否与"abc"相同,如果是则验证地址

这在 web3j 或 web3js 中是否可行(可用于服务器端)。或者有更好的方法吗?

Use the private ethereum key the sign/encrypt a message

这当然是可能的,但是 web3 没有公开加密功能。您需要使用常规 ECDSA 库来处理加密。但是,可以通过 web3 完成签名。

Server decrypts message using ethereum address sent

无法从以太坊地址恢复 public 密钥。但是,可以从签名中恢复它。您需要您的接收服务器 运行 ecrecover,然后解密文本。

Checks the message is same as"abc" and if so validates address

解密有效负载后,相等性检查就很容易了。要验证地址,您必须 运行 通过 keccak256 恢复的 public 密钥,然后验证哈希的最后 20 个字节是否与您收到的地址相同。