You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Nethereum C#库生成签名异常:验证对应陌生钱包地址

问题:Nethereum生成的消息签名验证对应错误地址

使用Nethereum C#库对消息签名时无报错,但通过签名验证工具核对时,签名对应了错误的钱包地址。

原代码如下:

string privateKey = "privateKey";
string dataToSign = @"Welcome
name";
string rpc = "https://1rpc.io/eth";

var web3 = new Web3(rpc);

var signer = new EthereumMessageSigner();
string signature = signer.EncodeUTF8AndSign(dataToSign, new EthECKey(privateKey));
Console.Writeline(signature);

问题原因

核心问题出在换行符的编码差异:

  • C#中用@定义的多行字符串,在Windows系统下会生成\r\n(Windows换行符)
  • 签名验证工具默认使用Unix风格的\n换行符处理消息
  • 两者的字节内容不同,导致最终生成的消息哈希不一致,验证时匹配到错误地址

另外,代码中初始化的Web3对象并未实际使用,可以移除。

修正方案

统一消息中的换行符为Unix风格,确保签名和验证时的消息字节完全一致:

修正后的代码

string privateKey = "privateKey";
// 将Windows换行符替换为Unix风格
string dataToSign = @"Welcome
name".Replace("\r\n", "\n");

var signer = new EthereumMessageSigner();
// 直接处理字节数组,避免编码歧义
byte[] messageBytes = System.Text.Encoding.UTF8.GetBytes(dataToSign);
string signature = signer.Sign(messageBytes, new EthECKey(privateKey));
Console.WriteLine(signature);

验证说明

生成新签名后,再去验证工具核对,即可匹配到正确的钱包地址。

内容的提问来源于stack exchange,提问作者Евгений Агарков

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 04:53:14