Ich versuche, einen öffentlichen Schlüssel mit einem privaten Schlüssel und einer bekannten Kurve zu generieren. Unten ist mein Code:Erzeuge ECPublicKey von ECPrivateKey
// Generate Keys
ECGenParameterSpec ecGenSpec = new ECGenParameterSpec("secp256r1");
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("ECDSA", "BC");
keyPairGenerator.initialize(ecGenSpec, new SecureRandom());
java.security.KeyPair pair = keyPairGenerator.generateKeyPair();
ECPrivateKey privateKey = (ECPrivateKey) pair.getPrivate();
ECPublicKey publicKeyExpected = (ECPublicKey) pair.getPublic();
// Expected public key
System.out.print("Expected Public Key: " +
BaseEncoding.base64Url().encode(publicKeyExpected.getEncoded()));
// Generate public key from private key
X9ECParameters ecp = SECNamedCurves.getByName("secp256r1");
ECDomainParameters domainParams = new ECDomainParameters(ecp.getCurve(),
ecp.getG(), ecp.getN(), ecp.getH(),
ecp.getSeed());
ECPoint Q = domainParams.getG().multiply(privateKey.getS()); // is this correct?
KeyFactory kf = KeyFactory.getInstance("ECDSA", "BC");
ECPublicKey publicKeyGenerated =
(ECPublicKey) kf.generatePublic(new X509EncodedKeySpec(Q.getEncoded(false))); // exception here
// Generated public key from private key
System.out.print("Generated Public Key: " +
BaseEncoding.base64Url().encode(publicKeyGenerated.getEncoded()));
jedoch, wenn ich rufe: kf.generatePublic(new X509EncodedKeySpec(Q.getEncoded(false)))
ich die Ausnahme erhalten: java.security.spec.InvalidKeySpecException: encoded key spec not recognised
(nicht meine Rechtschreibfehler)
I I Q
falsch bin Berechnung erscheint, aber ich bin nicht sicher, wo mein Fehler ist.
Danke für die Hilfe!
Warum denken Sie, Sie einen öffentlichen Schlüssel aus einem privaten Schlüssel zu bekommen? – Egl
Mit ECC ist es nur Punktmultiplikation, wenn Sie die Kurve kennen (secp256r1) – markw
Ich hoffe, dass es in der umgekehrten Weise nicht wahr ist. Ich meine, ich hoffe, dass ein privater ECC-Schlüssel nicht erhalten werden kann, wenn man nur den öffentlichen Schlüssel und die Kurve kennt. Ist es? – Egl