将 SHA512 输出转换为字符串时,“指定的值具有无效的控制字符”

Pet*_*ter 5 c# hash

我正在尝试为 API 创建哈希。我的输入是这样的:

FBN|网页|3QTC0001|RS1|260214133217|000000131127897656

我的预期输出是这样的:

17361DU87HT56F0O9967E34FDFFDFG7UO3346665324308667FDGJKD66F9888766DFKKJJR466634HH6566734JHJH34766734NMB97634NMB97634353435343434

我尝试了波纹管,但我不断收到“指定的值具有无效的控制字符。参数名称:值”

我实际上是在 REST 服务中这样做的。

public static string GetHash(string text)
{
    string hash = "";
    SHA512 alg = SHA512.Create();
    byte[] result = alg.ComputeHash(Encoding.UTF8.GetBytes(text));
    hash = Encoding.UTF8.GetString(result);        
    return hash;
}
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

use*_*740 4

问题是,Encoding.UTF8.GetString(result)由于 UTF-8 中的数据result无效(它只是二进制文件!),因此尝试将转换为文本是无效的 - 一般来说,特别是对于此输入 - 这会导致抛出异常。

相反,将 转换byte[]为所述字节序列的十六进制表示形式;不要将其视为 UTF-8 编码文本。

请参阅问题如何将字节数组转换为十六进制字符串,反之亦然?以及如何将十六进制字符串转换为字节数组?,讨论了实现此任务的几种不同方法。