文章
问答
讲堂
百科图谱
线下集训
更多
提问
发表文章
专栏
活动
文档
工作
集市
发现
Toggle navigation
文章
问答
讲堂
线下集训
专栏
活动
工作
文档
集市
搜索
登录/注册
5
如何从签名的十六进制编码中取出原来的值
回答问题即可获得
5
贡献值,回答被采纳后即可获得
9
学分。
比如我使用‘singer 123’进行签名 , 会获得一串十六进制编码0x12321312。如何从这个十六进制编码中解析出‘singer 123’ 我使用的库是ehters
比如我使用‘singer 123’进行签名 , 会获得一串十六进制编码0x12321312。如何从这个十六进制编码中解析出‘singer 123’ 我使用的库是ehters
0 条评论
请先
登录
后评论
默认排序
时间排序
5 个回答
Wade
- Footprint Analytics CTO
2024-05-20 16:58
擅长:数据分析,GameFi,NFT
```js const { ethers } = require('ethers'); // 创建一个新的钱包(私钥) const wallet = ethers.Wallet.createRandom(); // 原始消息 const message = 'singer 123'; // 对消息进行签名 const signature = await wallet.signMessage(message); console.log('签名:', signature); // 恢复签名者的地址 const signerAddress = ethers.utils.verifyMessage(message, signature); console.log('签名者的地址:', signerAddress); console.log('钱包地址:', wallet.address); ```
请先
登录
后评论
Phi·Wallet
- 区块链爱好者和从业者
2024-05-22 11:00
提问的逻辑错了。 一般的处理过程:把数据Hash,对Hash签名;验证的时候输入hash和签名,得到公钥(地址)。
请先
登录
后评论
Azleal
2024-05-27 20:40
先说结论,解析不出来。签名是单向算法,无法从签名的signature中得到原始数据。签名是用来验证数据没有被修改,也就是说如果要验签,需要同时传入原始消息以及消息签名。 如果你需要将字符串与16进制进行互转,可以使用下面的代码 ``` const data = 'singer 123'; // hexlified: 0x73696e67657220313233 const hexlified = ethers.utils.hexlify(ethers.utils.toUtf8Bytes(data)) // stringified: singer 123 const stringified = ethers.utils.toUtf8String(ethers.utils.arrayify(hexlified)) ```
请先
登录
后评论
jc0803kevin
- 合约开发/区块链开发/项目管理
2024-10-29 17:29
解析不出来,单向的
请先
登录
后评论
NPC.李括
2024-11-21 11:05
在以太坊中,签名的十六进制编码通常包含了多个字段,包括签名的哈希值、签名者的地址、以及其他元数据。因此,要从签名的十六进制编码中恢复原始值(如 'singer 123'),通常需要使用特定的步骤进行解析。 <br> 步骤概述 1. 获取签名的原始消息:在签名之前,通常会对原始消息进行哈希处理(如使用 keccak256),然后对这个哈希值进行签名。 2. 使用 Ethers.js 恢复签名:可以通过 Ethers.js 库来恢复签名的发送者地址,但不能直接从签名中恢复原始消息。 <br> 示例代码 以下是一个如何使用 Ethers.js 来签名消息并验证签名的示例: `javascript` ``` const { ethers } = require('ethers'); // 创建一个钱包 const wallet = ethers.Wallet.createRandom(); // 或者使用 wallet = new ethers.Wallet(privateKey); // 原始消息 const message = 'singer 123'; // 签名消息 async function signMessage() { const flatSig = await wallet.signMessage(message); console.log('Signature:', flatSig); return flatSig; } // 验证签名 async function verifySignature(signature) { const messageHash = ethers.utils.hashMessage(message); const signerAddress = ethers.utils.verifyMessage(message, signature); console.log('Signer Address:', signerAddress); } // 执行签名和验证 (async () => { const signature = await signMessage(); await verifySignature(signature); })(); ``` <br> 解析签名 从签名中恢复地址:你可以使用 ethers.utils.verifyMessage 方法来验证签名,并恢复签名者的地址。 恢复原始消息:如果你只拥有签名的十六进制编码,通常无法直接从中提取原始消息,因为签名的过程涉及对原始消息进行哈希处理。 <br> 注意 哈希和签名:签名的过程是基于原始消息的哈希值,因此直接从签名中恢复原始消息是不可能的。 存储原始消息:如果你希望在将来能够恢复原始消息,建议在应用层面存储原始消息和其对应的签名。
请先
登录
后评论
您需要登录后才可以回答问题,
登录
关注
5
关注
收藏
0
收藏,
1437
浏览
提出于 2024-05-20 15:23
×
发送私信
请将文档链接发给晓娜,我们会尽快安排上架,感谢您的推荐!
发给:
内容:
×
举报此文章
垃圾广告信息:
广告、推广、测试等内容
违规内容:
色情、暴力、血腥、敏感信息等内容
不友善内容:
人身攻击、挑衅辱骂、恶意行为
其他原因:
请补充说明
举报原因: