2017-04-12 85 views
1

两个字符串是私钥和公钥是:字符串转换为私人和公共密钥(RSA)

static String Public =   
     "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDH+wPrKYG1KVlzQUVtBghR8n9d" + "/n" + 
    "zcShSZo0+3KgyVdOea7Ei7vQ1U4wRn1zlI5rSqHDzFitblmqnB2anzVvdQxLQ3Uq" + "/n" + 
    "EBKBfMihnLgCSW8Xf7MCH+DSGHNvBg2xSNhcfEmnbLPLnbuz4ySn1UB0lH2eqxy5" + "/n"+ 
    "0zstxhTY0binD9Y+rwIDAQAB"+ "/n"; 
    static String Private = 
     "MIICxjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIr5NQ/LYPG/UCAggA" +"/n"+ 
     "MBQGCCqGSIb3DQMHBAiLh89iGSkmoASCAoBCpAo9/IzDE3yGhvWr9RgozE7revOo" +"/n"+ 
      "V2OXmU+d0+WYAAx2GYVaUCbFVrmgiVmrbiTgLUMXAGIpvxQ2rzyIvRHW/RN3Gcky" +"/n"+ 
     "qR/AwBatzixqrnoS4aD1/Ovjr4hwde4XHYbPEilZZuVAJFiznhy73qm/So4XghSY........." ; 

我已经阅读了其他问题,并试图解决它们,但没有工作....我有一个公钥和私钥都作为字符串..我需要将它们转换为'钥匙',但我不断得到java.security.spec.InvalidKeySpecException:java.security.InvalidKeyException ..我generatePublic和generatePrivate函数..也是关键是只是为了测试,因此,如果他人知道其他人可以...

 public static Key loadPublicKey(String stored) throws GeneralSecurityException, IOException 
     { 
     byte[] data = Base64.getDecoder().decode((stored.getBytes())); 
     X509EncodedKeySpec spec = new X509EncodedKeySpec(data); 
     KeyFactory fact = KeyFactory.getInstance("RSA"); 
     return fact.generatePublic(spec); 

     } 


public static Key loadPrivateKey(String key64) throws  GeneralSecurityException, IOException { 
     byte[] clear = Base64.getDecoder().decode(key64.getBytes()); 
     PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(clear); 
     KeyFactory fact = KeyFactory.getInstance("RSA"); 
     PrivateKey priv = fact.generatePrivate(keySpec); 
     Arrays.fill(clear, (byte) 0); 
     return priv; 

    } 
+4

除去换行'+“/ N “' – Jens

+0

仍然是相同的问题..我得到java.security.spec.InvalidKeySpecException:java.security.InvalidKeyException:我将公钥更改为:”MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDH + wPrKYG1KVlzQUVtBghR8n9dzcShSZo0 + 3KgyVdOea7Ei7vQ1U4wRn1zlI5rSqH DzFitblmqnB2anzVvdQxLQ3UqEBKBfMihnLgCSW8Xf7MCH + DSGHNvBg2xSNhcfEmnbLPLnbuz4ySn1UB0lH2eqxy50zstxhTY0binD9Y + rwIDAQAB” –

+0

我有我自己试了一下用公钥和它工作 – Jens

回答

2

删除字符串声明中的行Feed。这是不是关键的一部分:

static String Public =   
     "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDH+wPrKYG1KVlzQUVtBghR8n9d" + 
    "zcShSZo0+3KgyVdOea7Ei7vQ1U4wRn1zlI5rSqHDzFitblmqnB2anzVvdQxLQ3Uq" + 
    "EBKBfMihnLgCSW8Xf7MCH+DSGHNvBg2xSNhcfEmnbLPLnbuz4ySn1UB0lH2eqxy5" + 
    "0zstxhTY0binD9Y+rwIDAQAB"; 
static String Private = 
     "MIICxjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIr5NQ/LYPG/UCAggA" + 
     "MBQGCCqGSIb3DQMHBAiLh89iGSkmoASCAoBCpAo9/IzDE3yGhvWr9RgozE7revOo" + 
      "V2OXmU+d0+WYAAx2GYVaUCbFVrmgiVmrbiTgLUMXAGIpvxQ2rzyIvRHW/RN3Gcky" + 
     "qR/AwBatzixqrnoS4aD1/Ovjr4hwde4XHYbPEilZZuVAJFiznhy73qm/So4XghSY........." ; 

我已经用下面的代码试了一下:

public static void main(String[] args) throws GeneralSecurityException, IOException { 
     System.out.println(loadPublicKey(Public)); 

    } 

    public static Key loadPublicKey(String stored) throws GeneralSecurityException, IOException 
    { 
byte[] data = Base64.getDecoder().decode((stored.getBytes())); 
X509EncodedKeySpec spec = new X509EncodedKeySpec(data); 
KeyFactory fact = KeyFactory.getInstance("RSA"); 
return fact.generatePublic(spec); 

    } 

和输出端:

Sun RSA public key, 1024 bits 
    modulus: 140431102839105138202102866401190456107365606715815288536913018579006717438700259314092212104831553250527764925385527697411165705192297577022746989837839401358787285684108054389360182109284048524426941021357601686464156659759470495649944686235380003772357268264646549523784880655065600797504478771675703688879 
    public exponent: 65537 
+0

@zaph谢谢编辑它 – Jens

+0

@zaph它是一个多行的字符串..它不能被写为...除非它被全部放在一行 –

+0

@Jens仍然是相同的问题.. –

相关问题