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为字节[].
我希望你能理解我的意思,并能帮助我。
如果你只有一个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。