gpt4 book ai didi

c# - Bouncy CaSTLe ECDSA 从私钥创建公钥

转载 作者:行者123 更新时间:2023-12-02 10:39:38 27 4
gpt4 key购买 nike

我正在尝试用 C# 签署比特币交易。我有 2 位代码正在尝试完成。我可以使用 Bouncy caSTLe 创建一组私钥和公钥。我可以将其转换为钱包导入格式。

我还可以从 ECDSA 公钥生成比特币地址。

但是,我想签署一笔交易,而我拥有的只是我的私钥。我不想导入钱包并签名。那么,在仅给出私钥的情况下,如何生成公钥呢?

我找到了一个可以执行此操作的 JavaScript 方法:

ecparams.getG().multiply(this.priv).getEncoded();

我在 Bouncy CaSTLe 中见过的唯一方法是生成随机对。

private static AsymmetricCipherKeyPair GenerateKeys(int keySize)
{
ECKeyPairGenerator gen = new ECKeyPairGenerator();
SecureRandom secureRandom = new SecureRandom();
KeyGenerationParameters keyGenParam = new KeyGenerationParameters(secureRandom, keySize);
gen.Init(keyGenParam);
return gen.GenerateKeyPair();
}

最佳答案

从斯坦宁格的回答中,我得到了以下内容来使用我拥有的示例 key 。

using Org.BouncyCastle.Asn1.Sec;
using Org.BouncyCastle.Asn1.X9;
using Org.BouncyCastle.Crypto.Parameters;
using Org.BouncyCastle.Math;
using Org.BouncyCastle.Math.EC;

public static class Example
{
private static X9ECParameters curve = SecNamedCurves.GetByName("secp256k1");
private static ECDomainParameters domain = new ECDomainParameters(curve.Curve, curve.G, curve.N, curve.H);

public static byte[] ToPublicKey(byte[] privateKey)
{
BigInteger d = new BigInteger(privateKey);
ECPoint q = domain.G.Multiply(d);

var publicParams = new ECPublicKeyParameters(q, domain);
return publicParams.Q.GetEncoded();
}
}

关于c# - Bouncy CaSTLe ECDSA 从私钥创建公钥,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22003407/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com