我正在尝试用 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();
}
从斯坦宁格的回答中,我得到了以下内容来使用我拥有的示例密钥。
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();
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)