C# 如何使用bouncy castle生成共享秘密

C# 如何使用bouncy castle生成共享秘密,c#,bouncycastle,C#,Bouncycastle,我有2字节的ECDSA私钥和公钥数组。如何生成共享密钥。我发现了以下java代码。我试过跟随 ECPublicKeyParameters otherPartyPublicKey = (ECPublicKeyParameters)PublicKeyFactory.CreateKey(publicKeyBytes); ECPrivateKeyParameters privateKey = (ECPrivateKeyParameters) PrivateKeyFactory.CreateKey(pri

我有2字节的ECDSA私钥和公钥数组。如何生成共享密钥。我发现了以下java代码。我试过跟随

ECPublicKeyParameters otherPartyPublicKey = (ECPublicKeyParameters)PublicKeyFactory.CreateKey(publicKeyBytes);
ECPrivateKeyParameters privateKey = (ECPrivateKeyParameters) PrivateKeyFactory.CreateKey(privateKeyBytes);
IBasicAgreement aKeyAgree = AgreementUtilities.GetBasicAgreement("ECDH");
        aKeyAgree.Init(privateKey);
BigInteger sharedSecret = aKeyAgree.CalculateAgreement(otherPartyPublicKey);

但我得到错误“DEF length 118 object被55截断”

以下是我解决问题的方法。主要问题是曲线规格

        X9ECParameters ecP = NistNamedCurves.GetByName("P-256");
        ECDomainParameters eCDomainParameters = new ECDomainParameters(ecP.Curve, ecP.G, ecP.N);
        ECCurve curve = eCDomainParameters.Curve;
        ECPoint q = curve.DecodePoint(publicKeyBytes);
        ECPublicKeyParameters oEcPublicKeyParameters = new ECPublicKeyParameters(q, eCDomainParameters);
        Console.WriteLine(new BigInteger(privateKeyBytes));
        ECPrivateKeyParameters privateKey = new ECPrivateKeyParameters(new BigInteger(privateKeyBytes), eCDomainParameters);
        IBasicAgreement aKeyAgree = AgreementUtilities.GetBasicAgreement("ECDH");
        aKeyAgree.Init(privateKey);
        BigInteger sharedSecret = aKeyAgree.CalculateAgreement(oEcPublicKeyParameters);

下面是我解决问题的方法。主要问题是曲线规格

        X9ECParameters ecP = NistNamedCurves.GetByName("P-256");
        ECDomainParameters eCDomainParameters = new ECDomainParameters(ecP.Curve, ecP.G, ecP.N);
        ECCurve curve = eCDomainParameters.Curve;
        ECPoint q = curve.DecodePoint(publicKeyBytes);
        ECPublicKeyParameters oEcPublicKeyParameters = new ECPublicKeyParameters(q, eCDomainParameters);
        Console.WriteLine(new BigInteger(privateKeyBytes));
        ECPrivateKeyParameters privateKey = new ECPrivateKeyParameters(new BigInteger(privateKeyBytes), eCDomainParameters);
        IBasicAgreement aKeyAgree = AgreementUtilities.GetBasicAgreement("ECDH");
        aKeyAgree.Init(privateKey);
        BigInteger sharedSecret = aKeyAgree.CalculateAgreement(oEcPublicKeyParameters);

请澄清“publicKeyBytes”和“privateKeyBytes”的格式。另外,为什么不与我们分享异常的详细信息(即堆栈跟踪)?谢谢您的回复。我已经更改了代码。现在我的问题是java共享密钥和c#共享密钥对于同一密钥对是不同的。我在c#中使用了P-256,在Java中使用了secp256r1您已经更改了代码。。。但是你没有和我们分享,也没有提供我上面要求的额外信息。我已经解决了我的问题。我正在更新代码请澄清“publicKeyBytes”和“privateKeyBytes”的格式。另外,为什么不与我们分享异常的详细信息(即堆栈跟踪)?谢谢您的回复。我已经更改了代码。现在我的问题是java共享密钥和c#共享密钥对于同一密钥对是不同的。我在c#中使用了P-256,在Java中使用了secp256r1您已经更改了代码。。。但是你没有和我们分享,也没有提供我上面要求的额外信息。我已经解决了我的问题。我正在更新代码