2017-03-17 1 views
0

J'ai le code suivant qui lit un CSR à partir d'une chaîne et sort la clé publique dans un format PEM. J'ai également besoin d'obtenir la clé publique comme Java RSAPublickey mais je ne peux pas savoir comment faire cela.Publickey de bouncycastle RSAKeyParameters

import org.bouncycastle.crypto.params.RSAKeyParameters; 
import org.bouncycastle.crypto.util.PublicKeyFactory; 
import org.bouncycastle.pkcs.PKCS10CertificationRequest; 
import org.bouncycastle.util.io.pem.PemObject; 
import org.bouncycastle.util.io.pem.PemReader; 
import org.bouncycastle.util.io.pem.PemWriter; 

import java.io.*; 
import java.security.KeyFactory; 
import java.security.NoSuchAlgorithmException; 
import java.security.PublicKey; 
import java.security.spec.InvalidKeySpecException; 
import java.security.spec.RSAPublicKeySpec; 


    public class parseCSRfromString { 


     String csrPEM = "-----BEGIN CERTIFICATE REQUEST-----\n" + 
       "MIICwjCCAaoCAQAwfTELMAkGA1UEBhMCVVMxEDAOBgNVBAgTB0Zsb3JpZGExEzAR\n" + 
       "BgNVBAcTCkJvY2EgUmF0b24xGzAZBgNVBAoTEkxvb25leSBUb29ucywgSW5jLjEU\n" + 
       "MBIGA1UECxMLRGV2ZWxvcG1lbnQxFDASBgNVBAMTC2V4YW1wbGUuY29tMIIBIjAN\n" + 
       "BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAiJCj31d1Rp+aKz/GTkedaiS/VSCc\n" + 
       "PRARYgXukobjgBHx46HjldAcfg/DoANn5lEQaFxaIZJLbZ/AdLUyw/hUbU0CjWXv\n" + 
       "pN3Ep3o9XgRTPkIFoI22VOI/O2ZLjBq/E4DWyVmv+vG6BK0LRh7hykzPCw6KIRR9\n" + 
       "NCmUMJMQX5d5P/r1lR5H399pnLcLsrHoWDwBSEDgkGWyxnvEB0+/bIz42T3qnlFt\n" + 
       "7avarxlHG2p5DoRTf8GJ+6imY88ZeBW/Nk18aDINsAHWLv383JICIAsZ3VuMk8m/\n" + 
       "Z/Z5b21zIuZECDJjZjvAAjr/shVLB+Pck5+HJy6tqj79MJOQu+jKIrK8VwIDAQAB\n" + 
       "oAAwDQYJKoZIhvcNAQEFBQADggEBAGtuAAHG4OC9jSRjGWSqfMXTDMz9tgekDREA\n" + 
       "SYv5QIrOXsMzwbgDw8LxRJZEskl4JJOnjwEvUXWUF1M6XmG2h358nOnrkOlsumHw\n" + 
       "Tx5gGSr6S6aJO/HG46erctE8aWpnFZYMfuEkul4ApsIufL7Bxqs3NHZWcrWBlLIP\n" + 
       "aVCKx1FPRMC36Tj3EslbuUB/iTRt90Nfq1IxHMIKiwCiSNJSqfRVLANhI8MUbOjB\n" + 
       "CBly1wcH68WWNkyvHVvbcF/B9AfYG9AqWjZjygKpyf81VZWctXhDc8UtomqrblXN\n" + 
       "mvz4RKpIhZQLuuxlBrdzJkPm2sOdtdZghebCRRVWdjsig4sylgQ=\n" + 
       "-----END CERTIFICATE REQUEST-----"; 


     StringReader csrstring = new StringReader(csrPEM); 
     PemReader pemReader = new PemReader(csrstring); 

     public String readCSR() { 
      String theKey = new String(); 


      try { 
       PKCS10CertificationRequest csr = new PKCS10CertificationRequest(pemReader.readPemObject().getContent()); 
       pemReader.close(); 


       // Write the Public Key as a PEM-File 
       StringWriter output = new StringWriter(); 
       PemWriter pemWriter = new PemWriter(output); 

       PemObject pkPemObject = new PemObject("PUBLIC KEY", 
         csr.getSubjectPublicKeyInfo().getEncoded()); 

       pemWriter.writeObject(pkPemObject); 
       pemWriter.close(); 

       // System.out.println(output.getBuffer()); 
       theKey = output.getBuffer().toString(); 

       RSAKeyParameters pubkey = (RSAKeyParameters) PublicKeyFactory.createKey(csr.getSubjectPublicKeyInfo()); 

      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      return theKey; 
     } 


    } 

Répondre

2

construire la clé publique en utilisant le module et l'exposant de RSAKeyParameters

RSAKeyParameters pubkey =... 

RSAPublicKeySpec spec = new RSAPublicKeySpec(pubkey.getModulus(), pubkey.getExponent()); 
KeyFactory factory = KeyFactory.getInstance("RSA"); 
PublicKey pub = factory.generatePublic(spec); 
+0

Merci - Je vais essayer. – user1513388