PEM a PublicKey en Android

He visto una serie de preguntas similares, pero nada ha funcionado para mí. Estoy intentando simplemente convertir una llave pública de RSA que esté en formato de PEM que he recuperado de un servidor en un PublicKey en androide. ¿Puede alguien señalarme en la dirección correcta?

EDIT: He utilizado correctamente el código siguiente para convertir el PEM en una PublicKey, pero al codificar un mensaje, obtengo una salida inesperada …

  public PublicKey getFromString(String keystr) throws Exception { // Remove the first and last lines String pubKeyPEM = keystr.replace("-----BEGIN PUBLIC KEY-----\n", ""); pubKeyPEM = pubKeyPEM.replace("-----END PUBLIC KEY-----", ""); // Base64 decode the data byte [] encoded = Base64.decode(pubKeyPEM); X509EncodedKeySpec keySpec = new X509EncodedKeySpec(encoded); KeyFactory kf = KeyFactory.getInstance("RSA"); PublicKey pubkey = kf.generatePublic(keySpec); return pubkey; } public String RSAEncrypt(final String plain) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException, IOException { if (pubKey!=null) { cipher = Cipher.getInstance("RSA"); cipher.init(Cipher.ENCRYPT_MODE, pubKey); encryptedBytes = cipher.doFinal(plain.getBytes()); Log.d("BYTES", new String(encryptedBytes)); return Hex.encodeHexString(encryptedBytes); } else return null; } 

La salida se ve así:

 b6813f8791d67c0fa82890d005c8ff554b57143b752b34784ad271ec01bfaa9a6a31e7ae08444baef1585a6f78f3f848eecb1706bf7b2868fccefc9d728c30480f3aabc9ac5c3a9b4b3c74c2f7d6f0da235234953ea24b644112e04a2ec619f6bf95306ef30563c4608ec4b53ed7c15736d5f79c7fa1e35f2444beb366ae4c71 

Cuando espero algo más cerca de:

 JfoSJGo1qELUbpzH8d4QXtafup+J2F9wLxHCop00BQ4YS0cRdRCKDfHpFPZQYjNeyQj00HwHbz+vj8haTPbpdqT94AHAl+VZ+TPAiUw1U5EXLLyy4tzbmfVI7CwvMm26lwB4REzYUZdedha1caxMEfxQ5duB+x4ol9eRZM/savg= 

¿Hay algún formato o tipo de archivo que me falta?

Para responder a mi propia pregunta … La primera salida está en hexadecimal y la segunda salida está en la base 64. Simplemente cambie la instrucción return new String(Base64.encode(encryptedBytes)); para return new String(Base64.encode(encryptedBytes)); Y usted será bueno!

  • RSA Encrypt and Decrypt Strings en Android
  • Implementación de RSA Publickey en android
  • Firma de una cadena con una clave privada, firma RSA-SHA1 y md5 en Android
  • Android RSA Generación de pares de claves - ¿Debo usar Java estándar / Bouncy Castle / Spongy Castle / JSch / Other?
  • Descifrado RSA en Android - iPhone
  • Proporcionar autenticación segura de Facebook con mi servidor
  • Obtener el error java.lang.ArrayIndexOutOfBoundsException: demasiados datos para el bloque RSA
  • Diferencia de cifrado asimétrica - Android vs Java
  • ¿Cómo crear una llave RSA keystore Android con una validez infinita?
  • ¿Cómo puedo verificar un Google oficial apk
  • Cifrado en Android usando el algoritmo RSA con módulo dado y exponente
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.