gpt4 book ai didi

c# - 使用 Bouncy CaSTLe 为 DH key 交换生成 64 字节公钥

转载 作者:行者123 更新时间:2023-11-30 17:40:58 24 4
gpt4 key购买 nike

我需要在 C# 中使用 Bouncy CaSTLe 使用 secp256r1 曲线为 Diffie-Hellman key 交换生成 key 对。公钥应该是 64 字节(我不确定这是什么格式(压缩?),但我可以查到)。

我有以下代码,但缺少 Bouncy CaSTLe 文档让我迷路了。

X9ECParameters ecParams = SecNamedCurves.GetByName("secp256r1");
var spec = new ECDomainParameters(ecParams.Curve, ecParams.G, ecParams.N, ecParams.H, ecParams.GetSeed());
var keyGenParams = new ECKeyGenerationParameters(spec, new SecureRandom());

var keyGen = new ECKeyPairGenerator("ECDH");
keyGen.Init(keyGenParams);
AsymmetricCipherKeyPair keyPair = keyGen.GenerateKeyPair();
var pubKeyInfo = SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(keyPair.Public);

// pubKeyInfo.GetDerEncoded()
// pubKeyInfo.GetEncoded()
// pubKeyInfo.PublicKey
// pubKeyInfo.ToAsn1Object()

从这里,我可以访问许多不同的导出格式(如上所示),但大多数值最终都是 335 字节长。 pubKeyInfo.PublicKeyData.GetBytes() 给出了 65 个字节,但我不确定为什么。

我这里一定有一些基本的误解。我错过了什么?

如果有帮助,另一个客户端使用 uECC_make_key function生成 key 对。

最佳答案

我相信数据是由 pubKeyInfo.PublicKeyData.GetBytes() 提供的。它有 65 个字节长,因为它有一个前缀 0x04 字节,指示剩余的 64 个字节描述未压缩格式的公钥(相对于 0x02 指示压缩格式)。

参见 here进行一些讨论。

关于c# - 使用 Bouncy CaSTLe 为 DH key 交换生成 64 字节公钥,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33642100/

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