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 …
- RSA cifra con clave pública codificada en base64 en Android
- Descodificación RSA con clave pública
- Mensaje firmado usando OpenSSL; No se puede verificar con Android Java
- Clave de String en Java RSA
- Android - ¿Codificar y decodificar RSA con clave privada?
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?
- Problemas de subcontratación de encriptación y descifrado RSA
- Diferentes claves públicas RSA generadas en Android
- Servidor Android y PHP: cifrar y descifrar datos
- ¿Cómo utilizo una clave pública RSA generada en C # en Android?
- Verificación de la firma RSA de Google Licensing con PyCrypto
- Cómo cargar adbkey.pub con Python RSA
- RSA Encryption: Diferencia entre Java y Android
- Generación de claves RSA en Android en formato PKCS # 1 en Android
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!
- Android – Compuesto personalizado generado dinámicamente Ver recreado en RecyclerView, causando un rendimiento bajo
- Escaneo de código QR desde un archivo de imagen