2012-06-05 66 views
18

我有一個bse64encoded字符串來自外部來源(Android商店)的公鑰,我需要用它來驗證簽名的內容。如何將字符串轉換爲java.security.PublicKey接口的實例。我在Java 6上,如果這有所作爲。如何從base64編碼的字符串構造一個java.security.PublicKey對象?

關鍵是(可能)使用標準的Java庫而不是充氣城堡(它來自遠程團隊,所以我不確定)。他們的示例代碼表示使用Security.generatePublicKey(base64EncodedPublicKey);但標準java中的Security對象沒有這樣的方法。

+0

你在使用創建鍵,標準的Java libary,BouncyCastle的還是其他什麼東西? –

+0

標準java很可能但它的一個遠程團隊,所以我不知道 –

回答

20

好了笑容......試試這個

  • 的base64解碼的關鍵數據使用字節數組
  • 獲取一個實例來得到一個字節數組(byte [])
  • 創建一個新的X509EncodedKeySpec KeyFactory使用KeyFactory.getInstance(「RSA」)假設RSA在這裏
  • 使用X509EncodedKeySpec調用方法generatePublic(KeySpec)
  • Result/should /是您的使用的公鑰。
31

代碼上面的回答

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

我正在使用類似的一段代碼,但這是更好;) 此外,如果在Android上工作,你可以使用: byte [] byteKey = Base64.decode (key.getBytes(),Base64.DEFAULT); – tozhan

+1

代碼已更正,謝謝 – alexis

+6

您使用了什麼導入「Base64.decode」? – Hooli

0

試試這個....

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