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

时间:2018-08-13 13:41:44

标签: android ethereum web3-java

试图找出最好的方法。 在web3j / ethereum应用程序上工作时,我需要一种方法来验证服务器生成的地址并由应用程序用户使用。 我的做法是:

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

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

1 个答案:

答案 0 :(得分:2)

  

使用以太坊专用密钥对消息进行签名/加密

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

  

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

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

  

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

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