2012-09-30 91 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。 –