2017-08-18 46 views
0

生成公鑰我如何從字符串的Java

String publicK = "-----BEGIN PUBLIC KEY-----\n" + 
    "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAgFhTDtuYJ5G5LEHMesnf\n" + 
    "wX9cXZ1b/ozkkpbgtC3ziETiFkOFncbPCskpdbPmXxXv3vrwJ2RQIL2LZLZPe1xT\n" + 
    "AyQY1DdD8hGqIemMwV2NqfFoEomVL5+QOAKCRiHkGgte6a2+OoTk9JzRP/NVaPkB\n" + 
    "sdX1/nIPERYen3uDvUSYq83Ite2oDyaZZxj+/r46SadS/g5jWmeqgVoInJw813y7\n" + 
    "Ee2HgYVbnktlLNhqIGj+1OKmwop+GP7Kk5CAkt9fo4VjRRllDaX1yFCZEbDL254n\n" + 
    "S+LVOhl4mLBM8764+YVxjyYRC1Nq2rNZfQ602652i+l8u8nGqdiKOKDpjNDvhONP\n" + 
    "yQIDAQAB\n" + 
    "-----END PUBLIC KEY-----"; 

我想轉換公鑰對象的公共密鑰字符串。

byte[] byteKey = publicK.getBytes(); 
X509EncodedKeySpec spec = new X509EncodedKeySpec(byteKey); 
KeyFactory kf = KeyFactory.getInstance("RSA"); 
return kf.generatePublic(spec); 

上面的代碼拋出異常

java.security.InvalidKeyException: invalid key format 
at sun.security.x509.X509Key.decode(X509Key.java:387) 
at sun.security.x509.X509Key.decode(X509Key.java:403) 
at sun.security.rsa.RSAPublicKeyImpl.<init>(RSAPublicKeyImpl.java:84) 
at sun.security.rsa.RSAKeyFactory.generatePublic(RSAKeyFactory.java:298) 
at sun.security.rsa.RSAKeyFactory.engineGeneratePublic(RSAKeyFactory.java:201) 
+0

您確定您的密鑰是RSA密鑰嗎? – Jens

+0

什麼是'publicK'? – Jens

+0

是的。它的RSA密鑰只有 –

回答

1

你的關鍵是base64編碼的PEM格式。 您必須先刪除字符串,然後對其進行解碼,然後才能使用該keyfactory。

String publicK = "-----BEGIN PUBLIC KEY-----\n" 
      + "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAgFhTDtuYJ5G5LEHMesnf\n" 
      + "wX9cXZ1b/ozkkpbgtC3ziETiFkOFncbPCskpdbPmXxXv3vrwJ2RQIL2LZLZPe1xT\n" 
      + "AyQY1DdD8hGqIemMwV2NqfFoEomVL5+QOAKCRiHkGgte6a2+OoTk9JzRP/NVaPkB\n" 
      + "sdX1/nIPERYen3uDvUSYq83Ite2oDyaZZxj+/r46SadS/g5jWmeqgVoInJw813y7\n" 
      + "Ee2HgYVbnktlLNhqIGj+1OKmwop+GP7Kk5CAkt9fo4VjRRllDaX1yFCZEbDL254n\n" 
      + "S+LVOhl4mLBM8764+YVxjyYRC1Nq2rNZfQ602652i+l8u8nGqdiKOKDpjNDvhONP\n" + "yQIDAQAB\n" 
      + "-----END PUBLIC KEY-----"; 

    String pubKeyPEM = publicK.replace("-----BEGIN PUBLIC KEY-----\n", "").replace("-----END PUBLIC KEY-----", ""); 

    // Base64 decode the data 

    byte[] encodedPublicKey = Base64.decode(pubKeyPEM); 

    X509EncodedKeySpec spec = new X509EncodedKeySpec(encodedPublicKey); 
    KeyFactory kf = KeyFactory.getInstance("RSA"); 
    System.out.println(kf.generatePublic(spec));