【发布时间】:2016-02-12 01:05:18
【问题描述】:
我需要使用 C# 中的 Bouncy Castle 使用 secp256r1 曲线为 Diffie-Hellman 密钥交换生成密钥对。公钥应该是 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 生成密钥对。
【问题讨论】:
标签: c# .net diffie-hellman