C# SHA256将\n添加到值中

C# SHA256将\n添加到值中,c#,asp.net,C#,Asp.net,我有几种方法来做一些加密,它总是在我比较的值中添加一个\n 这是因为一些新的线条字符吗 public static class Security { public static string CreateHash(this string unHashed) { SHA256CryptoServiceProvider x = new SHA256CryptoServiceProvider(); byte[] data = Encoding.UTF8.

我有几种方法来做一些加密,它总是在我比较的值中添加一个
\n

这是因为一些新的线条字符吗

public static class Security
{
    public static string CreateHash(this string unHashed)
    {
        SHA256CryptoServiceProvider x = new SHA256CryptoServiceProvider();
        byte[] data = Encoding.UTF8.GetBytes(unHashed);
        data = x.ComputeHash(data);
        return Encoding.UTF8.GetString(data);
    }

    public static bool MatchHash(this string hashData, string hashUser)
    {
        if (hashUser == hashData)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
}
我在一个文本框中输入值,然后运行
CreateHash()
将值输入另一个文本框(全部用于测试)。然后从另一个文本框运行比较检查

protected void btn_dehash_Click(object sender, EventArgs e)
{
// get value entered and hash it
var matchPass = txt_password.Text.CreateHash();

// populate lbl with true or false
lbl_Name.Text = txt_hashed.Text.MatchHash(matchPass) ? "true" : "false";
}
我从
MD5
中得到的结果是可以的,因为这要短得多。我想使用更安全的方法,所以我使用了SHA256,这是我从比较中得到的结果


有人知道为什么会发生这种情况吗?

不要将散列变成字符串!将其保留为字节数组

散列表示一个字节序列,它可能作为UTF-8有效,也可能作为UTF-8无效

如果您想要可读的散列,请执行类似以下操作:

    byte[] hash = x.ComputeHash(bytes);
    string hashString = string.Empty;
    foreach (byte x in hash)
    {
        // Turn each byte into it's hex equivalent (00 to FF).
        hashString += String.Format("{0:x2}", x);
    }
    return hashString;

或者,正如评论所建议的,使用base 64编码。

不要将哈希转换为字符串!将其保留为字节数组

散列表示一个字节序列,它可能作为UTF-8有效,也可能作为UTF-8无效

如果您想要可读的散列,请执行类似以下操作:

    byte[] hash = x.ComputeHash(bytes);
    string hashString = string.Empty;
    foreach (byte x in hash)
    {
        // Turn each byte into it's hex equivalent (00 to FF).
        hashString += String.Format("{0:x2}", x);
    }
    return hashString;

或者,正如评论所建议的,使用BASE64编码。

如果你确实想要一个字符串,使用BASE64编码,你会没事的。如果你确实想要一个字符串,使用BASE64编码,你会没事的。不要使用
==
来比较字符串,而是
.equals()
不要使用
=
来比较字符串,而是
.equals()