2013-12-14 72 views
0

我有這樣的代碼:java.security.spec.InvalidKeySpecException:java.security.InvalidKeyException:IOException異常:早產檢測EOF

// Turn the encoded key into a real RSA public key. 
// Public keys are encoded in X.509. 
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes); 
KeyFactory keyFactory = KeyFactory.getInstance("RSA"); 
PublicKey publicKey = keyFactory.generatePublic(keySpec); 

錯誤:

java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException: IOException: Detect premature EOF

問題出在哪裏?

+0

你從哪裏得到'keyBytes'? –

+0

從這段代碼:File f = new File(「C:/Users/Joe/Desktop/joesaab.txt」); 嘗試FileInputStream fis = new FileInputStream(f); ByteArrayOutputStream baos = new ByteArrayOutputStream(); int theByte = 0; ((theByte = fis.read())!= -1) { baos.write(theByte); } fis.close(); byte [] keyBytes = baos.toByteArray(); baos.close(); System.out.println(「pub和priv done ..編碼開始!」); – user3077162

+0

該文件是否存在?你拼寫正確的路徑和名稱? 'keyBytes'的內容是什麼?它看起來合理嗎?或者它只是一個空字符串或什麼的?你在哪裏捕捉'try'塊的異常,並且捕捉到什麼有趣的東西? –

回答

1
public static PublicKey getPublicKey(String key) throws Exception {byte[] keyBytes; 
     keyBytes = (new BASE64Decoder()).decodeBuffer(key); 
     X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes); 
     KeyFactory keyFactory = KeyFactory.getInstance("RSA"); 
     PublicKey publicKey = keyFactory.generatePublic(keySpec); 
     return publicKey; 
    } 

這是我如何把「鑰匙串」到真正的RSA密鑰(公鑰公鑰)。 也許有幫助。