android - 是否可以在 web3j 中对消息(字符串)进行签名/加密,然后使用公钥(地址)解密消息
问题描述
试图找出解决这个问题的最佳方法。在 web3j/ethereum 应用程序上工作,我需要一种方法来验证地址是否由服务器生成并由应用程序用户使用。我的方法思路:
- 使用以太坊私钥签名/加密消息
- 向服务器发送加密消息(例如“abc”)和以太坊地址
- 服务器使用发送的以太坊地址解密消息
- 检查消息是否与“abc”相同,如果是,则验证地址
这在 web3j 或 web3js 中是否可行(可用于服务器端)。还是有更好的方法?
解决方案
使用以太坊私钥签名/加密消息
这当然是可能的,但是 web3 没有公开加密功能。您需要使用常规 ECDSA 库来处理加密。但是,可以通过 web3 进行签名。
服务器使用发送的以太坊地址解密消息
无法从以太坊地址恢复公钥。但是,可以从签名中恢复它。您将需要您的接收服务器运行ecrecover
,然后解密文本。
检查消息是否与“abc”相同,如果是,则验证地址
解密有效负载后,相等性检查就很容易了。要验证地址,您必须通过 运行恢复的公钥keccak256
,然后验证哈希的最后 20 个字节与您收到的地址相同。
推荐阅读
- javascript - 如何在 react.js 中显示不同日期的相同项目的值
- buildroot - 如何在 raspberrypi 上的 WAYLAND 中更改 HDMI 输出的方向(旋转)
- python - 在linux ubuntu中的selenium python中以正常模式(无隐身模式)打开chromedriver?
- sql - 将驱动器映射到您的 SQL 脚本 NET USE
- android - Kotlin 多平台配置问题
- javascript - JavaScript:关于传入 `addEventListener` 的回调的混淆
- c++ - 如何让 clangd 完成器与 Unrealengine-4 一起工作
- c++ - 在 wxEntry(argc, argv) 之前来自 wxWIdgets (3.1.4) 的 wxMessageBox() 类;警告使用缺少的 CPU 指令集
- c++ - 使用 const 实现 unordered_map 迭代器的问题
- python - 在 python3 中使用 re.sub() 从字符串中删除除给定字母后面的数字之外的所有数字