【问题标题】:How to convert C# hashed byte array to string for passing to API?如何将 C# 散列字节数组转换为字符串以传递给 API?
【发布时间】:2012-01-06 23:54:34
【问题描述】:

我有许多值必须组合成 SHA256 哈希值才能传递给 Web 服务。这些值使用 Encoding.ASCII.GetBytes(allparametershere) 组合成一个字节数组,然后通过 myHashMethod.ComputeHash(allParameterByteArray) 散列到 SHA256。由于我必须将此值添加到请求标头中,因此必须将其作为字符串传递给请求标头。

第 3 方系统要求必须是 64 个字符的 Hex 格式的字符串。我过去使用过 Convert.Base64String,但我认为这不是他们想要的,因为我只会在传递这样的字符串时出错。有什么想法吗?

谢谢!

【问题讨论】:

    标签: c# hash


    【解决方案1】:

    这将为您提供大写十六进制的结果,将 X 更改为 x 以使其小写。

    将 SHA256Result 更改为您的 SHA256 哈希结果。

    byte[] SHA256Result;
    StringBuilder stringBuilder = new StringBuilder();
    
    foreach(byte b in SHA256Result)
        stringBuilder.AppendFormat("{0:X2}", b);
    
    string hashString = stringBuilder.ToString();
    

    结果字符串是 hashString,长度应该是 64,记住 SHA256Result 是 32 个字节。

    【讨论】:

    • 您不应该使用StringBuilderAppendFormat() 来代替吗?
    • 谢谢。它对我有用。它可以与 7-Zip 的结果进行正确比较。
    • 为什么在stringBuilder.AppendFormat("{0:X2}", b);中使用2
    • @ElFik , 2 表示每个字节指定 2 个字符。仅使用 X,十进制的 10 将由 A 表示,而 X2 将 10 表示为 0A。大写 X 表示大写十六进制,小写 X 表示小写十六进制。 docs.microsoft.com/en-us/dotnet/standard/base-types/…
    猜你喜欢
    • 2013-04-21
    • 1970-01-01
    • 2019-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-01
    相关资源
    最近更新 更多