Foro de elhacker.net

Programación => Programación General => Mensaje iniciado por: Mester11 en 22 Junio 2017, 19:04 pm



Título: Convertir formato PEM a Clave publica
Publicado por: Mester11 en 22 Junio 2017, 19:04 pm
Hola.

Estoy tratando de convertir una clave publica en formato PEM a clave publica en JAVA.
Este es un chat simple para Android. El servidor está hecho en Go y el cliente, como no, en JAVA. El problema que se me plantea es el siguiente:
Yo envío la clave pública del cliente y luego recibo la del servidor en formato PEM. La función para generar la clave PEM en Go es esta:
Código:
func getPEMPublicKey(privateKey *rsa.PrivateKey) ([]byte, error) {
  publicKey := privateKey.PublicKey

  bytes, err := x509.MarshalPKIXPublicKey(&publicKey)
  if err != nil {
    return []byte(""), nil
  }

  block := &pem.Block{
    Type:  "PUBLIC KEY",
    Bytes: bytes,
  }

  return pem.EncodeToMemory(block), nil
}

Y la funcion en Java para recoger esa clave es esta:
Código
  1. private PublicKey getPEMFromString(String keystr) throws Exception {
  2.        StringReader in = new StringReader(keystr);
  3.        PEMParser reader = new PEMParser(in);
  4.        PemObject pemObject = reader.readPemObject();
  5.  
  6.        reader.close();
  7.  
  8.        X509EncodedKeySpec spec =
  9.                new X509EncodedKeySpec(pemObject.getContent());
  10.        java.security.KeyFactory kf = java.security.KeyFactory.getInstance("RSA");
  11.        return kf.generatePublic(spec);
  12.    }

Mi principal problema, como he dicho es la funcion en Java. Ya que he creado un cliente en Go que funciona a la perfección, y en Java puedo cifrar y descifrar perfectamente cuando genero con las claves propias generadas en el cliente.

El problema es que al cifrar con la clave publica del servidor, Go no puede descrifrar el contenido porque el bloque generado está mal.

Gracias de antemano.