2012-06-05 10 views
18

Mam ciąg znaków bse64 zakodowany klucz publiczny z zewnętrznego źródła (Android Store) i muszę go użyć do zweryfikowania podpisanej treści. Jak przekonwertować ciąg znaków na instancję interfejsu java.security.PublicKey. Jestem na Java 6, jeśli to robi różnicę.Jak mogę skonstruować obiekt java.security.PublicKey z łańcucha zakodowanego w base64?

Klucz jest (prawdopodobnie) wygenerowany przy użyciu standardowego java lib, a nie dmuchanego zamku (jego odległy zespół, więc nie jestem pewien). Ich przykładowy kod mówi o użyciu Security.generatePublicKey (base64EncodedPublicKey); ale obiekt Security w standardowej java nie ma takiej metody.

+0

Co używasz do tworzenia klucza, standard Java libary, BouncyCastle lub coś innego? –

+0

Standardowa Java bardzo prawdopodobnie, ale jest to zdalny zespół, więc nie jestem pewien –

Odpowiedz

20

Ok uśmiechami ... Spróbuj tego

  • base64 zdekodować kluczowe dane, aby uzyskać tablicę bajtów (byte [])
  • utworzyć nowy X509EncodedKeySpec pomocą tablicy bajtów
  • Get instancję z KeyFactory użyciu KeyFactory.getInstance ("RSA") zakładając RSA tutaj
  • wywołać metodę generatePublic (KeySpec) z X509EncodedKeySpec
  • result/powinna/być klucz publiczny do użytkowania.
31

Kod powyższej odpowiedzi

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

Użyłem podobnego kawałka kodu, ale to jest lepsze;) Również jeśli pracując na Androidzie można użyć: bajt [] byteKey = Base64.decode (key.getBytes(), Base64.DEFAULT); – tozhan

+1

kod poprawiony, dziękuje – alexis

+6

Jaki import używasz do 'Base64.decode'? – Hooli

0

Spróbuj to ....

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