作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试用 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/
我是一名优秀的程序员,十分优秀!