我想按照说明衍生一个十六进制比特币私钥的WIF从 - https://en.bitcoin.it/wiki/Wallet_import_format 然而,当我尝试散列字符串(包括0x80字节),我得到不同结果比预期的要好。 我应该得到8147786C4D15106333BF278D71DADAF1079EF2D2440A4DDE37D747DED5403592。 而是我收到e2e4146a36e9c455cf95a4f259f162c353cd419cc3fd0e69ae36d7d1b6cd2c09。比特币sha256到十六进制产生不同的结果比预期的
我在谷歌上广泛阅读,我了解到我应该将字符串转换为二进制文件。我做了,然后将这些二进制文件中的char数组散列为相同的结果。
代码现在正得益于@Heinan Cabouly和@JaredPar
这里是工作代码:
using System;
using System.Security.Cryptography;
using System.Text;
using System.Linq;
namespace Base58Encode
{
internal class Program
{
public static string Str = "800C28FCA386C7A227600B2FE50B7CAE11EC86D3BF1FBE471BE89827E19D72AA1D";
public static byte[] Bytes;
public static void Main()
{
Bytes = StringToByteArray(Str);
SHA256Managed sha = new SHA256Managed();
string hashstr = String.Empty;
byte[] encrypt = sha.ComputeHash(Bytes);
foreach (byte b in encrypt)
{
hashstr += b.ToString("x2");
}
Console.WriteLine(hashstr);
//prints e2e4146a36e9c455cf95a4f259f162c353cd419cc3fd0e69ae36d7d1b6cd2c09
//instead of 8147786C4D15106333BF278D71DADAF1079EF2D2440A4DDE37D747DED5403592
Console.ReadLine();
}
public static byte[] StringToByteArray(string hex)
{
return Enumerable.Range(0, hex.Length)
.Where(x => x % 2 == 0)
.Select(x => Convert.ToByte(hex.Substring(x, 2), 16))
.ToArray();
}
}
}
这是怎么凑在C#中的十六进制字符串SHA-256。 谢谢大家!帮助我出去了很多!
'byte [] ba = Encoding.ASCII.GetBytes(Str);' - 你知道这不是将字符串解析为十六进制,对吧?它只是使用ASCII编码将字符串转换为字节,因此每个字符一个字节。在堆栈溢出搜索“解析十六进制字符串到字节C#”... –
谢谢,我想通了。 :) – user3410566