2017-08-18 1 views
0

J'ai la clé publique ChaîneComment générer PublicKey de chaîne 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-----"; 

Je veux convertir PublicKey objet.

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

code ci-dessus throws Exception

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

Vous êtes sûr que votre clé est une clé RSA? – Jens

+0

Qu'est-ce que 'publicK'? – Jens

+0

Oui. Sa clé RSA seulement –

Répondre

1

Votre clé est un format PEM codé en base64. Vous devez d'abord supprimer les chaînes, puis les décoder, puis utiliser la 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));