2012-06-05 15 views
18

Tengo una clave pública bse64encoded de fuente externa (Android Store) y necesito usarla para verificar el contenido firmado. ¿Cómo puedo convertir la cadena en una instancia de la interfaz java.security.PublicKey? Estoy en Java 6 si eso hace la diferencia.¿Cómo puedo construir un objeto java.security.PublicKey a partir de una cadena codificada en base64?

La clave se genera (probablemente) usando java lib estándar y no castillo hinchable (es de un equipo remoto, así que no estoy seguro). Su código de muestra dice que use Security.generatePublicKey (base64EncodedPublicKey); pero el objeto de seguridad en java estándar no tiene dicho método.

+0

¿Qué estás usando para crear su clave, el libary Java estándar, BouncyCastle o alguna otra cosa? –

+0

Java estándar muy probablemente, pero es un equipo remoto, así que no estoy seguro –

Respuesta

20

Ok para las muecas ... probar este

  • base 64 decodifican los datos clave para obtener una matriz de bytes (byte [])
  • Crear un nuevo X509EncodedKeySpec usando la matriz de bytes
  • Obtener una instancia de KeyFactory usando KeyFactory.getInstance ("RSA") asumiendo RSA aquí
  • llamada al método generatePublic (KeySpec) con el X509EncodedKeySpec
  • Resultado/debe/haber una clave pública para su uso.
  • Código
31

para la respuesta anterior

public static PublicKey getKey(String key){ 
    try{ 
     byte[] byteKey = Base64.decode(key.getBytes(), Base64.DEFAULT); 
     X509EncodedKeySpec X509publicKey = new X509EncodedKeySpec(byteKey); 
     KeyFactory kf = KeyFactory.getInstance("RSA"); 

     return kf.generatePublic(X509publicKey); 
    } 
    catch(Exception e){ 
     e.printStackTrace(); 
    } 

    return null; 
} 
+0

Estaba usando una pieza similar de código, pero esto es mejor;) Además, si se trabaja en Android puede usar: byte [] byteKey = Base64.decode (key.getBytes(), Base64.DEFAULT); – tozhan

+1

código corregido, gracias – alexis

+6

¿Qué importación está utilizando para 'Base64.decode'? – Hooli

0

probar este ....

PublicKey getPublicKey(byte[] encodedKey) throws NoSuchAlgorithmException, InvalidKeySpecException 
{ 
    KeyFactory factory = KeyFactory.getInstance("RSA"); 
    X509EncodedKeySpec encodedKeySpec = new X509EncodedKeySpec(encodedKey); 
    return factory.generatePublic(encodedKeySpec); 
} 
Cuestiones relacionadas