2012-03-12 11 views
5

Sto generando una coppia di chiavi sulla piattaforma utilizzando il pacchetto Bouncy Castle.Come ottenere PublicKey da AsymmetricCipherKeyPair, non parametri publickeycipher?

SecureRandom random = new SecureRandom(); 

ECKeyPairGenerator pGen = new ECKeyPairGenerator(); 

ECKeyGenerationParameters genParam = new ECKeyGenerationParameters(params,random); 

pGen.init(genParam); 

AsymmetricCipherKeyPair pair = pGen.generateKeyPair(); 

Qui, pair è di tipo AsymmetricCipherKeyPair. E, ho bisogno di generare un X509V1Certificate sul server usando questa coppia. Ma, X509Certificate's setPublicKey(PublicKey pubkey) accetta solo oggetti di tipo PublicKey. Quindi ho bisogno di recuperare un PublicKey da un AsymmetricCipherKeyPair sul server. Ma, sto ottenendo ECPublicKeyParameters, che non è accettato nel metodo setPublicKey.

Quindi, il mio requisito qui è quello di ottenere un PublicKey da un AsymmetricCipherKeyPair.

+0

Se si è in Java Ambiente ME allora non hai java.se curity.PublicKey o java.security.cert. –

+0

Grazie per la risposta. Invio la chiave pubblica dell'applicazione client j2me al server per ottenere il certificato client. Il server riceve la chiave pubblica, ma durante la generazione di X509Certificate, non è in grado di impostarePublicKey() utilizzando la chiave pubblica ricevuta. Poiché ha ricevuto la chiave pubblica di tipo ECPublicKeyparameters. Quindi voglio cambiare il tipo di questa chiave pubblica a PublicKey sul server. Si prega di citare suggerimenti. Grazie in anticipo. –

+0

Quindi, come si invia la chiave dal client j2me al server? Lo hai serializzato o codificato in qualche modo? –

risposta

3

Il modo più semplice è quello di utilizzare BouncyCastle come JavaCryptoProvider:

  1. Genera coppia di chiavi

    KeyPairGenerator kpg = KeyPairGenerator.getInstance("EC", "BC"); 
    ECGenParameterSpec ecsp = new ECGenParameterSpec(keyAlg); 
    kpg.initialize(ecsp); 
    KeyPair kp = kpg.generateKeyPair(); 
    
  2. Fai 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

La libreria lightweight bouncy castle (utilizzata nella piattaforma J2ME) non contiene la classe KeyPairGenerator. SO, ho usato ECKeyPairGenerator al posto della classe KeyPairGenerator. E la coppia che abbiamo ottenuto da questo, sotto forma di AsymmetricCipherKeyPair. Ma X.509V1CertificateGenerator non consente una coppia di chiavi di questo tipo. Quindi, ho bisogno di convertire questo modulo in forma KeyPair. Grazie. –

Problemi correlati