2012-06-05 6 views
18

Ich habe eine bse64encoded String Öffentlicher Schlüssel aus externer Quelle (Android Store) und ich muss es verwenden, um signierten Inhalt zu überprüfen. Wie kann ich die Zeichenfolge in eine Instanz der Schnittstelle java.security.PublicKey konvertieren? Ich bin auf Java 6, wenn das einen Unterschied macht.Wie kann ich ein java.security.PublicKey-Objekt aus einer Base64-codierten Zeichenfolge erstellen?

Der Schlüssel ist (wahrscheinlich) generiert mit Standard-Java-Lib und nicht Hüpfburg (es ist von einem Remote-Team, so bin ich mir nicht sicher). Ihr Beispielcode besagt, dass Security.generatePublicKey (base64EncodedPublicKey) verwendet werden soll. aber das Security-Objekt in Standard-Java hat keine solche Methode.

+0

Was Sie mit Ihrem Schlüssel, den Standard-Java-Libary, BouncyCastle oder etwas anderes zu schaffen? –

+0

Standard-Java sehr wahrscheinlich, aber es ist ein Remote-Team, so bin ich nicht sicher –

Antwort

20

Ok für grins ... versuchen diese

  • base64 die Schlüsseldaten entschlüsseln ein Byte-Array zu erhalten (byte [])
  • Erstelle ein neues X509EncodedKeySpec mit dem Byte-Array
  • eine Instanz Get von KeyFactory KeyFactory.getInstance ("RSA") unter der Annahme, RSA hier
  • Aufruf der Methode generatePublic (KeySpec) mit dem
  • Ergebnis/sollte/sein ein öffentlicher Schlüssel für Ihre Nutzung X509EncodedKeySpec verwenden.
31

-Code für die oben genannte Antwort

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

Ich war mit einem ähnlichen Stück Code, aber das ist besser;) Auch wenn Sie auf Android arbeiten könnten Sie verwenden: byte [] byteKey = Base64.decode (key.getBytes(), Base64.DEFAULT); – tozhan

+1

code corrected, danke – alexis

+6

Welchen Import verwendest du für 'Base64.decode'? – Hooli

0

Try this ....

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