【问题标题】:Generate Bitcoin public/private key from Guid C#从 Guid C# 生成比特币公钥/私钥
【发布时间】:2021-12-25 11:41:30
【问题描述】:

我有一个随机生成的 128 位 guid(加密安全)。如何使用 C# 将其用作种子来生成比特币的公钥和私钥?通过种子,我的意思是每次我使用相同的 guid 作为输入时,它应该会产生相同的公钥/私钥。

我看过 NBitcoin,但不明白如何实现。

【问题讨论】:

  • 您需要 1 个来自 guid 的密钥对,还是更多? 128 位不足以保证安全。比特币地址长度为 160 位(RIPEMD160 哈希函数的结果)。
  • 谢谢@Zergatul。是的 1 个密钥对。我需要一个接受随机生成的数字并返回私钥+公钥的函数。我可以生成任意位数的数字,128 只是一个例子。

标签: c# bitcoin private-key public-key nbitcoin


【解决方案1】:

您可以直接创建 32 个随机字节作为您的私钥。下面的例子。但这非常重要:这 32 个字节必须来自密码安全的伪随机生成器。例如,如果您使用 C# 内置的 Random 类,任何人都可以使用普通计算机恢复您的私钥。如果你打算在真正的比特币网络中使用它,你需要非常小心。我不确定 Guid 生成是否是加密安全的。

static void Main(string[] args)
{
    byte[] GetRawKey()
    {
        // private key=1 in this example
        byte[] data = new byte[32];
        data[^1] = 1;
        return data;
    }

    var key = new Key(GetRawKey()); // private key
    var pair = key.CreateKeyPair(); // key pair (pub+priv keys)
    var addrP2pkh = key.GetAddress(ScriptPubKeyType.Legacy, Network.Main); // P2PKH address
    var addrP2sh = key.GetAddress(ScriptPubKeyType.SegwitP2SH, Network.Main); // Segwit P2SH address
    Console.WriteLine(addrP2pkh.ToString());
    Console.WriteLine(addrP2sh.ToString());
}

【讨论】:

    猜你喜欢
    • 2014-01-17
    • 2013-07-14
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    • 2019-10-12
    • 1970-01-01
    • 2021-11-09
    相关资源
    最近更新 更多