C# 具有SHA256键的哈希字符串

C# 具有SHA256键的哈希字符串,c#,hash,sha256,C#,Hash,Sha256,我不能得到正确的散列,我真的不知道它出了什么问题。 我得到的所有哈希值与此站点上的不正确: 公共导航页面() { string bytes=“10002096 18 1001аПаааааааааааааааааааааа”; string key=“14653285”; 字符串消息=字节;//字符串中的xml文档 System.Text.UTF8Encoding encoding=新的System.Text.UTF8Encoding(); byte[]keyByte=encoding.GetB

我不能得到正确的散列,我真的不知道它出了什么问题。 我得到的所有哈希值与此站点上的不正确:

公共导航页面()
{
string bytes=“10002096 18 1001аПаааааааааааааааааааааа”;
string key=“14653285”;
字符串消息=字节;//字符串中的xml文档
System.Text.UTF8Encoding encoding=新的System.Text.UTF8Encoding();
byte[]keyByte=encoding.GetBytes(key);
HMACSHA256 HMACSHA256=新的HMACSHA256(密钥字节);
byte[]messageBytes=encoding.GetBytes(消息);
byte[]hashmessage=hmacsha256.ComputeHash(messageBytes);
var tempHash=ByteToString(hashmessage);
}
公共静态字符串ByteToString(字节[]buff)
{
字符串sbinary=“”;
for(int i=0;i

这就是我所做的,但它给了我错误的结果。

当您将字符串放入要转换为SHA-256散列的
文本中时:
textbox在您链接的站点上,您必须删除字符串的c#escape字符(在这种情况下,将
\“
替换为
)然后你会得到同样的结果——你的代码工作正常

这是因为C#会将
\“
视为转义的
,而站点不会(因此将其包含在哈希中)


显然,您是StackOverflow新手,但您能发布更多可接受的代码吗?什么是沙基?为什么其他行不在函数中?只需发布全部内容,而且文本/密码不是正确的密钥。可以使用由16到32个随机字节组成的密钥,也可以使用基于密码的KDF从密码派生密钥。(我建议尽可能使用随机密钥而不是密码)整个过程要大得多。我需要使用服务器上的密钥对其进行散列,稍后我将在服务器上发送此文档。所以不应该有随机键。对我来说很有用。我从您链接的站点和您的程序中获得了
0cfaf5ec263…
。(只要我在站点上粘贴了正确的字符串而没有转义序列)
public NavigatedPage ()
{
    string bytes = "<?xml version=\"1.0\" encoding=\"utf-8\" ?><Command>  <LMI_PAYMENT_NO>1000</LMI_PAYMENT_NO><LMI_MERCHANT_ID>2096</LMI_MERCHANT_ID>  <LMI_HASH></LMI_HASH>  <LMI_PAYMENT_SYSTEM>18</LMI_PAYMENT_SYSTEM>  <LMI_PAYMENT_AMOUNT>1001</LMI_PAYMENT_AMOUNT>  <LMI_PAYMENT_DESC>Оплата договора</LMI_PAYMENT_DESC></Command>";
    string key = "14653285";
    string message = bytes;//xml document in a string
    
    System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding();
    
    byte[] keyByte = encoding.GetBytes(key);
    
    HMACSHA256 hmacsha256 = new HMACSHA256(keyByte);
    
    byte[] messageBytes = encoding.GetBytes(message);
    
    byte[] hashmessage = hmacsha256.ComputeHash(messageBytes);
    
    var tempHash = ByteToString(hashmessage);
}

public static string ByteToString(byte[] buff)
{
    string sbinary = "";

    for ( int i = 0; i < buff.Length; i++ )
    {
        sbinary += buff[ i ].ToString("X2"); // hex format
    }
    return ( sbinary );
}