如何在Java中读取RSA密钥?

时间:2012-09-30 16:50:39

标签: java cryptography rsa x509 pkcs#8

我正在尝试用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)

1 个答案:

答案 0 :(得分:6)

Putty使用自己的密钥格式。您需要将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。 openssh的Cygwin版本可以正常使用;没有必要找到一个运行openssh的Unix系统。