【发布时间】:2018-02-22 00:00:53
【问题描述】:
如何在 C# 中正确地对 SHA-256 哈希进行十六进制编码?
private static string ToHex(byte[] bytes, bool upperCase)
{
StringBuilder result = new StringBuilder(bytes.Length * 2);
for (int i = 0; i < bytes.Length; i++)
result.Append(bytes[i].ToString(upperCase ? "X2" : "x2"));
return result.ToString();
}
private string hashRequestBody(string reqBody)
{
string hashString;
using (var sha256 = SHA256Managed.Create())
{
var hash = sha256.ComputeHash(Encoding.Default.GetBytes(reqBody));
hashString = ToHex(hash, false);
}
MessageBox.Show(hashString);
return hashString;
}
我这样做了,但结果与我使用的银行沙箱不同。
测试数据:
{"CorporateID":"BCAAPI2016","SourceAccountNumber":"0201245680","TransactionID":"00000001","TransactionDate":"2017-09-13","ReferenceID":"refID","CurrencyCode":"IDR","Amount":"10000","BeneficiaryAccountNumber":"0201245681","Remark1":"Transfer Test","Remark2":"Online Transfer"}
银行沙盒结果:e9d06986c1ed6b063bf59aa873030013725c518631deef2b2147e614017c2141
我的:1c83acc42cf905ca8afba27ef0640c70ad2856a366b57c17cf16f2894327676e
【问题讨论】:
-
ToHex() 看起来不错,但问题是别的。你能显示测试数据吗?
-
@AlexK。编辑:)
-
你的结果对于那个输入是正确的,你确定你应该只是散列而不是使用像 HMAC 这样的东西吗?
-
@AlexK。请把它作为答案。你帮助我进入了正确的方向:)