【问题标题】:How to convert ECDiffieHellmanPublicKey instance to DER file in .net framework?如何将 ECDiffieHellmanPublicKey 实例转换为 .net 框架中的 DER 文件?
【发布时间】:2018-07-08 12:40:12
【问题描述】:

我有以下代码:

ECDiffieHellman ecdh = ECDiffieHellman.Create(ECCurve.NamedCurves.nistP256);
ECDiffieHellmanPublicKey ecdhPublic = ecdh.PublicKey;

如何将 ECDiffieHellmanPublicKey 实例 (ecdhPublic) 导出到 DER 编码文件中?

【问题讨论】:

标签: c# .net cryptography elliptic-curve der


【解决方案1】:

使用 BouncyCastle (http://www.bouncycastle.org/),您可以将 ECDH 公钥导出到 DER 编码的 ANS.1 对象

X9ECParameters ecP = NistNamedCurves.GetByName("P-256");
ECDomainParameters ecSpec = new ECDomainParameters(ecP.Curve, ecP.G, ecP.N, ecP.H, ecP.GetSeed());
ECKeyPairGenerator g = new ECKeyPairGenerator();
g.Init(new ECKeyGenerationParameters(ecSpec, new SecureRandom()));

AsymmetricCipherKeyPair server = g.GenerateKeyPair();
ECPublicKeyParameters serverPub = (ECPublicKeyParameters)server.Public;
var result = SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(serverPub).GetDerEncoded();

【讨论】:

  • 如果我有 P-256 曲线点的 X 和 Y 坐标,如何直接获取 ECPublicKeyParameters?
  • 不完全确定,还没有谈到那个用例。可能会看起来像这样的地方:BigInteger x = new BigInteger("0"); BigInteger y = new BigInteger("0"); ECPoint example = ecP.Curve.CreatePoint(x, y); //needs to be a bouncy castle biginteger x, y ECDomainParameters ecSpec = new ECDomainParameters(ecP.Curve, example, ecP.N, ecP.H, ecP.GetSeed());
  • 试过以下,它工作。字符串曲线名称=“P-256”; X9ECParameters ecP = NistNamedCurves.GetByName(curveName); FpCurve c = (FpCurve)ecP.Curve; byte[] pointBytes = Utility.HexToBytes(“0418a3d65a2f886e0ba479e75912b0a04b35724f99369d36a87babbcd780d40d73208c2a105a91d7a98b38169bb69fcdadb98c0a13cdbdf8012e2ea2);” var q = c.DecodePoint(pointBytes); var keyParameters = new ECPublicKeyParameters("ECDH", q, SecObjectIdentifiers.SecP256r1); var 结果 = SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(keyParameters).GetDerEncoded();
猜你喜欢
  • 2012-10-12
  • 2019-08-17
  • 2022-01-10
  • 1970-01-01
  • 2017-07-26
  • 2023-03-04
  • 2015-12-12
  • 2012-09-06
  • 1970-01-01
相关资源
最近更新 更多