2012-03-12 10 views
5

Generuję parę kluczy na platformie przy użyciu pakietu Bouncy Castle.Jak zdobyć PublicKey z AsymmetricCipherKeyPair, a nie parametry publickeycipher?

SecureRandom random = new SecureRandom(); 

ECKeyPairGenerator pGen = new ECKeyPairGenerator(); 

ECKeyGenerationParameters genParam = new ECKeyGenerationParameters(params,random); 

pGen.init(genParam); 

AsymmetricCipherKeyPair pair = pGen.generateKeyPair(); 

Tutaj pair jest typu AsymmetricCipherKeyPair. I muszę wygenerować certyfikat X509V1 na serwerze przy użyciu tej pary. Jednak jednostka X 509Certificate's setPublicKey(PublicKey pubkey) przyjmuje tylko obiekty typu PublicKey. Muszę więc pobrać z serwera PublicKey z serwera AsymmetricCipherKeyPair. Ale otrzymuję ECPublicKeyParameters, który nie jest akceptowany w metodzie setPublicKey.

Moim obowiązkiem jest uzyskanie PublicKey z AsymmetricCipherKeyPair.

+0

Jeśli jesteś w Javie Środowisko ME to nie masz java.se curity.PublicKey lub java.security.cert. –

+0

Dziękuję za odpowiedź .. Wysyłam klucz publiczny aplikacji klienta j2me na serwer, aby uzyskać certyfikat klienta. Serwer otrzymuje klucz publiczny, ale podczas generowania certyfikatu X509 nie może ustawićPublicKey() przy użyciu otrzymanego klucza publicznego. Od momentu otrzymania klucza publicznego typu ECPublicKeyparameters. Dlatego chcę zmienić typ tego publicznego klucza na PublicKey na serwerze. Proszę wspomnieć o sugestiach. Z góry dziękuję. –

+0

Jak przesyłasz klucz z klienta j2me na serwer? Czy serializowałeś go lub kodowałeś w jakiś sposób? –

Odpowiedz

3

Najprostszym sposobem jest użycie BouncyCastle jak JavaCryptoProvider:

  1. Generowanie pary kluczy

    KeyPairGenerator kpg = KeyPairGenerator.getInstance("EC", "BC"); 
    ECGenParameterSpec ecsp = new ECGenParameterSpec(keyAlg); 
    kpg.initialize(ecsp); 
    KeyPair kp = kpg.generateKeyPair(); 
    
  2. Bądź X509v1 Cert

    X509V1CertificateGenerator certGen = new X509V1CertificateGenerator(); 
    X500Principal dnName = new X500Principal("CN=C3"); 
    Calendar c = Calendar.getInstance(); 
    c.add(Calendar.YEAR, 10); 
    certGen.setSerialNumber(keyId); 
    certGen.setIssuerDN(dnName); 
    certGen.setNotBefore(new Date()); 
    certGen.setNotAfter(c.getTime()); 
    certGen.setSubjectDN(dnName);      
    certGen.setPublicKey(keyPair.getPublic()); 
    certGen.setSignatureAlgorithm("SHA256withECDSA"); 
    certGen.generate(keyPair.getPrivate(), "BC"); 
    
+0

Lekka biblioteka zamków do skakania (używana w platformie J2ME) nie zawiera klasy KeyPairGenerator. SO, użyłem ECKeyPairGenerator zamiast klasy KeyPairGenerator. I parę, którą uzyskaliśmy z tego, w postaci AsymmetricCipherKeyPair. Ale X.509V1CertificateGenerator nie zezwala na parę kluczy tego typu. Potrzebuję więc przekonwertować ten formularz na formularz KeyPair. Dziękuję Ci. –

Powiązane problemy