Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 这如何允许我们使用加密函数进行散列?_C#_Encryption - Fatal编程技术网

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();
    }
}