【问题标题】:Is it possible to sign/encrypt a message (string) in web3j and then decrypt the message with the public key (address)是否可以在 web3j 中对消息(字符串)进行签名/加密,然后使用公钥(地址)解密消息
【发布时间】:2018-08-13 13:41:44
【问题描述】:

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

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

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

【问题讨论】:

  • 我认为签名比加密和解密更有意义。

标签: android ethereum web3-java


【解决方案1】:

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

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

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

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

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

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

【讨论】:

  • 您知道任何其他有助于使用以太坊公钥进行加密/解密的 java 库吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-28
相关资源
最近更新 更多