C# 这如何允许我们使用加密函数进行散列?
我在中看到了这段代码 这个代码是做什么的C# 这如何允许我们使用加密函数进行散列?,c#,encryption,C#,Encryption,我在中看到了这段代码 这个代码是做什么的 string.Concat(hmacsha512.Hash.Select(b => b.ToString("x2")) 据我所知,您不能将字符串传递给tostring方法 为什么需要选择 代码可以简化吗?为什么你要先去排队,然后再去康卡特 特别是我不知道b.ToStringx2做了什么。我很惊讶它竟然能编译。表示tostring方法不接受参数 那我他妈的为什么需要那个精选的东西。编码员试图完成的是什么 我们得到了一组字节数组,然后我们使用com
string.Concat(hmacsha512.Hash.Select(b => b.ToString("x2"))
据我所知,您不能将字符串传递给tostring方法
为什么需要选择
代码可以简化吗?为什么你要先去排队,然后再去康卡特
特别是我不知道b.ToStringx2做了什么。我很惊讶它竟然能编译。表示tostring方法不接受参数
那我他妈的为什么需要那个精选的东西。编码员试图完成的是什么
我们得到了一组字节数组,然后我们使用computeHash得到了一组字节数组。然后我们重新编码为字符串。这是基本的想法
那么为什么将文本转换成字节是非常快的编码。UTF8.GetBytestext,但是我们必须做一些奇怪的事情来将这些文本转换成字符串
特别是我不知道b.ToStringx2做了什么。我感到惊讶的是它竟然遵守了
见和。它将字节格式化为两个字符的小写十六进制字符串。0x03=>03,0x0A=>0a
为什么需要选择
选择将一个可枚举项转换为另一个可枚举项。由于哈希是一个字节[],它是IEnumerable,因此这会将每个字节转换为内表达式的计算值。因此,每个字节成为两个字符的十六进制字符串
为什么你要先去排队,然后再去康卡特
String.Concatstring[]已添加到.NET Framework 1.0/1.1中。在.NET Framework 4.0中添加了String.ConcatIEnumerable。如果这段代码是针对.NET3.5编写的,那么在不使用更高效的StringBuilder方法编写的情况下,这段代码是最佳的
编码员试图完成的是什么
你跑了吗?它生成一个十六进制字符串,表示密钥下数据的HMAC-SHA-2-512
我感到惊讶的是它竟然遵守了
它只使用C 3.0中的语法,它使用的最新东西是。C3.0下个月就满10岁了。它是与.NETFramework 3.5一起发布的
代码可以简化吗
当然
嗯,那更有效。可能并不简单,这取决于您对字节的定义。byte.toString x2生成所述字节的十六进制表示形式。如果您不确定表达式是什么或所涉及的类型,则当您将鼠标悬停在对象上时,VisualStudio通常会非常随和。是的,这可以简化-BitConverter.ToStringbyte[].Replace-更短,但不一定更高效,如果您想要小写,您需要一个额外的ToLower.ToArray-Concat混合代码-因为IEnumerable是在.NET4.0中添加的,所以可能该代码比该代码旧,或者是为了向后兼容旧的.NET版本。在vb.NET中,tostring不带字符串参数。所以我想知道为什么我能做到tostringx2@J.Chang:Byte.toString是任何.NET语言都可以使用的BCL方法。我不是一个普通的VB.NET程序员,但我的VisualStudio显示了这种过载。我知道隐藏高级成员有一个可疑的功能,但我认为ToString不算一个,而且无论哪种情况,隐藏它都不意味着它不可用。是的,它不在他们的web上。bartonjs构建的一个更清晰。基本上,对于每个字节,只需输入一个d数字字符串。这很有道理。我不知道不在他们的网站上意味着什么,但如果你指的是微软自己的文档。
string.Concat(hmacsha512.Hash.Select(b => b.ToString("x2"))
public static string CalculateSignature(string text, string secretKey)
{
using (var hmacsha512 = new HMACSHA512(Encoding.UTF8.GetBytes(secretKey)))
{
byte[] hmac = hmacsha512.ComputeHash(Encoding.UTF8.GetBytes(text));
StringBuilder builder = new StringBuilder(hmac.Length * 2);
foreach (byte b in hmac)
{
builder.Append(b.ToString("x2"));
}
return builder.ToString();
}
}