我使用Vircurex API编写一个小程序来交易电子货币。他们的文档使用的是Ruby代码示例,我不确定C#中的等价物是什么。对于任何感兴趣的人,他们的文档列在这里:
https://vircurex.com/welcome/api
我一直得到8003 - 身份验证失败,我想这意味着我发送了一个不正确的SHA2哈希。他们写道:
“跨越多个输入值的SHA2哈希。请参阅下面有关如何计算它的详细信息”
tok = Digest::SHA2.hexdigest("#{secret_word};#{user_name};#{t};#{trx_id};create_order;sell;10;btc;50;nmc")
我在c#中有以下代码:
public static string getHashSha256(string text)
{
byte[] bytes = Encoding.UTF8.GetBytes(text);
SHA256Managed hashstring = new SHA256Managed();
byte[] hash = hashstring.ComputeHash(bytes);
string hashString = string.Empty;
foreach (byte x in hash)
hashString += String.Format("{0:x2}", x);
return hashString;
}
我试图在网上irb at
测试它http://tryruby.org/levels/1/challenges/0
为了看看Digest :: SHA2.hexdigest(“.......”)方法会生成什么哈希,但是我得到了
Digest::SHA2.hexdigest("hello")
=> #<NameError: uninitialized constant Digest>
所以基本上我不知道它是否是一个不正确的哈希值,但我认为是。我希望能够在Ruby中测试它,并且如果C#方法生成哈希的方式存在错误,也会感谢任何帮助。
答案 0 :(得分:0)
给定相同的输入字符串,您的C#代码和对Ruby中Digest::SHA2.hexdigest()
的调用应该(并且在我的测试中)会产生相同的结果。我认为问题不在于您生成哈希的方式。
答案 1 :(得分:0)
public static String sha256_hash(String value)
{
StringBuilder Sb = new StringBuilder();
using (SHA256 hash = SHA256Managed.Create())
{
Encoding enc = Encoding.UTF8;
Byte[] result = hash.ComputeHash(enc.GetBytes(value));
foreach (Byte b in result)
{
Sb.Append(b.ToString("x"));
}
}
return Sb.ToString();
}