Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - Mester11

#1
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:

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 (java) [Seleccionar]

private PublicKey getPEMFromString(String keystr) throws Exception {
        StringReader in = new StringReader(keystr);
        PEMParser reader = new PEMParser(in);
        PemObject pemObject = reader.readPemObject();

        reader.close();

        X509EncodedKeySpec spec =
                new X509EncodedKeySpec(pemObject.getContent());
        java.security.KeyFactory kf = java.security.KeyFactory.getInstance("RSA");
        return kf.generatePublic(spec);
    }


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.