2012-03-12 19 views
5

Estoy generando un par de claves en la plataforma usando el paquete Bouncy Castle.¿Cómo obtener PublicKey de AsymmetricCipherKeyPair, no los parámetros publickeycipher?

SecureRandom random = new SecureRandom(); 

ECKeyPairGenerator pGen = new ECKeyPairGenerator(); 

ECKeyGenerationParameters genParam = new ECKeyGenerationParameters(params,random); 

pGen.init(genParam); 

AsymmetricCipherKeyPair pair = pGen.generateKeyPair(); 

Aquí, pair es de tipo AsymmetricCipherKeyPair. Y, necesito generar un X509V1Certificate en el servidor usando este par. Pero, el setPublicKey(PublicKey pubkey) de X509Certificate acepta solo objetos del tipo PublicKey. Entonces necesito recuperar un PublicKey de un AsymmetricCipherKeyPair en el servidor. Pero recibo ECPublicKeyParameters, que no se acepta en el método setPublicKey.

Por lo tanto, mi requisito aquí es obtener un PublicKey de un AsymmetricCipherKeyPair.

+0

Si usted está en el Java Entorno ME entonces no tienes java.se curity.PublicKey o java.security.cert. –

+0

Gracias por su respuesta. Estoy enviando la clave pública de la aplicación del cliente j2me al servidor para obtener el certificado del cliente. El servidor recibe la clave pública, pero al generar X509Certificate, no puede establecer la clave pública() utilizando la clave pública recibida. Desde la clave pública recibida de tipo ECPublicKeyparameters. Así que quiero cambiar el tipo de esta clave pública a PublicKey en el servidor. Por favor mencione sugerencias. Gracias de antemano. –

+0

Entonces, ¿cómo está enviando la clave del cliente j2me al servidor? ¿La serializaste o la codificaste de alguna manera? –

Respuesta

3

La forma más sencilla es utilizar BouncyCastle como JavaCryptoProvider:

  1. Generar par de claves

    KeyPairGenerator kpg = KeyPairGenerator.getInstance("EC", "BC"); 
    ECGenParameterSpec ecsp = new ECGenParameterSpec(keyAlg); 
    kpg.initialize(ecsp); 
    KeyPair kp = kpg.generateKeyPair(); 
    
  2. Hacer 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 biblioteca ligera de castillo hinchable (utilizada en la plataforma J2ME) no contiene la clase KeyPairGenerator. SO, he usado ECKeyPairGenerator en lugar de la clase KeyPairGenerator. Y el par que hemos obtenido de esto, en forma de AsymmetricCipherKeyPair. Pero X.509V1CertificateGenerator no permite un par de llaves de este tipo. Entonces, necesito convertir este formulario a la forma de KeyPair. Gracias. –

Cuestiones relacionadas