在 .NET Core 中使用 SHA-1 [英] Using SHA-1 in .NET Core

查看:36
本文介绍了在 .NET Core 中使用 SHA-1的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在 dotnet core 中散列字符串时得到奇怪的结果我发现了这个类似的问题:

我安装了 nuget 包 System.Security.Cryptography.Algorithms (v 4.3.0)

还尝试使用 GetEncoding(0) 来获取系统默认编码.也没有用.

解决方案

我不确定SHA-1 Online"如何表示您的哈希值,但是由于它是一个哈希值,因此它可以包含无法在(UTF8) 字符串.我认为您最好使用 Convert.ToBase64String() 来轻松表示字符串中的字节数组哈希:

var hashString = Convert.ToBase64String(hash);

要将其转换回字节数组,请使用 Convert.FromBase64String():

var bytes = Convert.FromBase64String(hashString);

另见:将 md5 哈希字节数组转换为字符串.这显示了在字符串中表示哈希的多种方法.例如,hash.ToString("X") 将使用十六进制表示.

顺便说一下,感谢 broodjepoep.:-)

I get strange results when hashing a string in dotnet core I have found this similar question: Computing SHA1 with ASP.NET Core and have found how to convert a byte array to string in .net core

this is my code:

private static string CalculateSha1(string text)
{
    var enc = Encoding.GetEncoding(65001); // utf-8 code page
    byte[] buffer = enc.GetBytes(text);

    var sha1 = System.Security.Cryptography.SHA1.Create();

    var hash = sha1.ComputeHash(buffer);

    return enc.GetString(hash);
}

and this is my test:

string test = "broodjepoep"; // forgive me

string shouldBe = "b2bc870e4ddf0e15486effd19026def2c8a54753"; // according to http://www.sha1-online.com/

string wouldBe = CalculateSha1(test);

System.Diagnostics.Debug.Assert(shouldBe.Equals(wouldBe));

output:

���M�Hn�ѐ&��ȥGS

I have the nuget package System.Security.Cryptography.Algorithms installed (v 4.3.0)

Also tried with GetEncoding(0) to get the sys default coding. Also did not work.

解决方案

I'm not sure how 'SHA-1 Online' represents your hash, buts since it's a hash, it can contain characters that can't be represented in a (UTF8) string. I think you're better off using Convert.ToBase64String() to easily represent the byte-array hash in a string:

var hashString = Convert.ToBase64String(hash);

To convert it back to a byte-array, use Convert.FromBase64String():

var bytes =  Convert.FromBase64String(hashString);

Also see: Converting a md5 hash byte array to a string. Which shows there a multiple ways to represent hash in a string. For example, hash.ToString("X") will use a hexadecimal representation.

Kudos for broodjepoep, by the way. :-)

这篇关于在 .NET Core 中使用 SHA-1的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆