2017-06-08 4 views
0

J'ai 2 tableaux d'octets de ECDSA privée et clé publique comment puis-je générer le secret de partage. J'ai trouvé le code Java suivant. J'ai essayé suivantcomment générer le secret de partage en utilisant le château gonflable

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); 

mais je reçois une erreur « DEF longueur 118 objet tronqué de 55 »

+0

S'il vous plaît préciser quel format « publicKeyBytes » et « » privateKeyBytes sont fournis. De plus, pourquoi ne pas partager avec nous les détails (à savoir l'état de trace de la pile) de l'exception? –

+0

thx pour votre réponse. J'ai changé mon code. maintenant mon problème est le secret partagé de Java et le secret partagé de C# ne sont pas mêmes pour la même paire de clés. J'ai utilisé P-256 dans C# et secp256r1 dans java –

+0

Vous avez changé votre code ... mais vous ne l'avez pas partagé avec nous, ni fourni les informations supplémentaires que j'ai demandé ci-dessus. –

Répondre

0

Voici comment je résolu mon problème. Le principal problème était spec courbe

 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);