首页 > 解决方案 > 是否可以在 web3j 中对消息(字符串)进行签名/加密,然后使用公钥(地址)解密消息

问题描述

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

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

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

标签: androidethereumweb3-java

解决方案


使用以太坊私钥签名/加密消息

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

服务器使用发送的以太坊地址解密消息

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

检查消息是否与“abc”相同,如果是,则验证地址

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


推荐阅读