AsymmetricKeyParameter as byte[]

本文关键字:byte as AsymmetricKeyParameter | 更新日期: 2023-09-27 18:17:28

我正在尝试使用c# BouncyCastle进行ECDH密钥交换。我已经成功地创建了必要的AsymmetricCipherKeyPair对象,并且我还能够生成另一方公钥的共享密钥。

然而,为了实际交换公钥,我需要它作为一个字节[]或至少任何我可以转化为原始数据的东西,因为我用来在双方之间传输密钥的协议不接受任何BouncyCastle对象。

   X9ECParameters ecPars = NistNamedCurves.GetByName("P-521");
  ECDomainParameters ecDomPars = new ECDomainParameters(ecPars.Curve, ecPars.G, ecPars.N, ecPars.H, ecPars.GetSeed());
  IAsymmetricCipherKeyPairGenerator gen = GeneratorUtilities.GetKeyPairGenerator("ECDH");
  gen.Init(new ECKeyGenerationParameters(ecDomPars, new SecureRandom()));
  AsymmetricCipherKeyPair keyPair = gen.GenerateKeyPair();
  IBasicAgreement keyAgreement = AgreementUtilities.GetBasicAgreement("ECDH");
  keyAgreement.Init(keyPair.Private);

我这里需要的是keyPair的键值。Public为字节[].

我希望你能理解我的意思,并能帮助我。

AsymmetricKeyParameter as byte[]

如果你只有一个ECPublicKeyParameter 'pub'(即从keyPair.Public),你可以得到公共点编码:

byte[] data = pub.Q.GetEncoded();

接收端:

ECCurve curve = ecDomPars.Curve;
ECPoint q = curve.DecodePoint(data);
ECPublicKeyParameter peerPub = new ECPublicKeyParameter(q, ecDomPars);

更典型的是交换证书,否则你将无法保证你"同意"的是谁。

我有点担心你可能会"滚动你自己的加密协议";如果这是一个真实的应用程序,请考虑使用现有的协议,也许只是TLS。