2012-09-30 81 views
1

我想讀取Java中的RSA公鑰和私鑰文件。如何讀取Java中的RSA密鑰?

我的RSA公鑰和私鑰是使用PuttyGen生成的。 (SSH-2 RSA,1024位)

我使用閱讀文件的代碼是:

//public key 
pubkeyBytes = getBytesFromFile(new File(pubKeyfileName)); 
KeySpec pubSpec = new X509EncodedKeySpec(pubkeyBytes); 
RSAPublicKey pubKey =(RSAPublicKey) rsakeyFactory.generatePublic(pubSpec); 

//private key 
privkeyBytes = getBytesFromFile(new File(privKeyfileName)); 
PKCS8EncodedKeySpec privSpec = new PKCS8EncodedKeySpec(privkeyBytes); 
PrivateKey privKey = rsakeyFactory.generatePrivate(privSpec); 

它拋出:

java.security.InvalidKeyException: invalid key format 
    at sun.security.x509.X509Key.decode(Unknown Source) 

回答

6

膩子使用自己的密鑰格式。您需要將Putty密鑰導出爲OpenSSH格式 - 請參閱How to convert SSH keypairs generated using PuttyGen(Windows) into key-pairs used by ssh-agent and KeyChain(Linux)

然後,您需要將OpenSSH密鑰轉換爲pkcs8格式 - 請參閱How to Load RSA Private Key From File。 Cygwin的openssh版本可以正常工作。沒有必要找到一個Unix系統來運行openssh

+0

OpenSSL也可以編譯爲Windows命令shell,儘管我個人更喜歡Cygwin中的Bash shell。 –