如何以十六进制编码SHA-256散列
问题描述:
如何以十六进制在C#中正确编码SHA-256散列?如何以十六进制编码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
答
我见过几个解决这个问题,但你的代码是最优雅的。我稍微重新考虑了它并测试了它的答案。我也得到了哈希:
1c83acc42cf905ca8afba27ef0640c70ad2856a366b57c17cf16f2894327676e
看到这里的工作小提琴:https://dotnetfiddle.net/QbsKTc
也许这散列银行的不同,因为你改变了JSON字符串删除私人数据?
using System;
using System.Security.Cryptography;
using System.Text;
public class Program
{
public static void Main()
{
Console.WriteLine(SHA256HexHashString("{\"CorporateID\":\"BCAAPI2016\",\"SourceAccountNumber\":\"0201245680\",\"TransactionID\":\"00000001\",\"TransactionDate\":\"2017-09-13\",\"ReferenceID\":\"refID\",\"CurrencyCode\":\"IDR\",\"Amount\":\"10000\",\"BeneficiaryAccountNumber\":\"0201245681\",\"Remark1\":\"Transfer Test\",\"Remark2\":\"Online Transfer\"}"));
}
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 static string SHA256HexHashString(string StringIn)
{
string hashString;
using (var sha256 = SHA256Managed.Create())
{
var hash = sha256.ComputeHash(Encoding.Default.GetBytes(StringIn));
hashString = ToHex(hash, false);
}
return hashString;
}
}
ToHex()看起来不错,问题是另一回事。你能显示测试数据吗? –
@AlexK。编辑:) –
你的结果是正确的输入,你确定你应该只是散列,而不是使用像HMAC的东西? –