Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Can';t从文件(Java)加载RSA公钥_Java_Encryption_Rsa_Bouncycastle_Public Key - Fatal编程技术网

Can';t从文件(Java)加载RSA公钥

Can';t从文件(Java)加载RSA公钥,java,encryption,rsa,bouncycastle,public-key,Java,Encryption,Rsa,Bouncycastle,Public Key,我使用puttyGen生成了一个公钥文件,如下所示: 生成包含此内容的文件: ---- BEGIN SSH2 PUBLIC KEY ---- Comment: "rsa-key-20200116" AAAAB3NzaC1yc2EAAAABJQAAAQEA9/jf/WH+pfOHU0j9bVYjaPHp9V1F+Tau9Pwh Zd30m389u8dCFQqWcAYIIbAFs5eE744bdztMpIC2HbqO9hCa5AAq1U2CD0XzWUFg H5OC9krVSuhnsU6F

我使用puttyGen生成了一个公钥文件,如下所示:

生成包含此内容的文件:

    ---- BEGIN SSH2 PUBLIC KEY ----
Comment: "rsa-key-20200116"
AAAAB3NzaC1yc2EAAAABJQAAAQEA9/jf/WH+pfOHU0j9bVYjaPHp9V1F+Tau9Pwh
Zd30m389u8dCFQqWcAYIIbAFs5eE744bdztMpIC2HbqO9hCa5AAq1U2CD0XzWUFg
H5OC9krVSuhnsU6FAJoS2zz+I4P30cuLY98Kzxt6q8pouT3fIgRAmWaKpkO/ol46
APub5ZdTTTqHwpuzOKEI0iVkd6Lsqrp98kLnwCxUV3zyecZN/YsoRRpQaMbdfCfi
kc0qKjwVRNffLk4aCPB4X0yY/EYaeLmNObCuyHqvAojM5SsoB7xlFVLfoNLtnygj
Akxty2+3MO2rsO+dl++sPMNg3EK8pfT+igB0piR2dG9LpQf9Vw==
---- END SSH2 PUBLIC KEY ----
但尝试从下面的方法加载此公钥时却没有任何运气:

    public static PublicKey getPublicKey(String fileName) throws Exception {
    FileReader reader = new FileReader(fileName);
    PemReader pemReader = new PemReader(reader);
    PemObject pemObj = pemReader.readPemObject();

    pemReader.close();
    X509EncodedKeySpec spec = new X509EncodedKeySpec(pemObj.getContent());
    KeyFactory kf = KeyFactory.getInstance("RSA", "BC");
    return kf.generatePublic(spec);     
}
结果对象始终为null。按照每一个教程找到,有人帮我。PemObject和PemReader来自org.bouncycastle.util.io.pem*


我在做傻事吗?

是的,因为
X509EncodedKeySpec
是X.509证书的密钥,使用
SubjectPublicKeyInfo
结构。因此,您要么将密钥转换为该密钥(有用于此的命令行实用程序),要么使用SSH库读取密钥。如果您还拥有私钥,您可以尝试以下内容:(最上面的命令)谢谢您的回答。我必须将我的私钥(从puttyGen)导出到“OpenSSH”,然后通过如下命令行将我的pub密钥转换为x509编码:
ssh-keygen-f private.key-e-m pkcs8>test-pkcs8.pub
,如中所述。最后可以加载公钥。尽管如此,我还是想探索另一种方法,在根本不进行任何转换的情况下读取键。你们知道有哪些库允许在Java中这样做吗?如前所述,支持SSH2的库应该做到这一点。老实说,没有理由为SSH2创建RSA密钥对,然后将其用于其他用途。还有很多其他选项,比如OpenSSL命令行、Java自己的
keytool
,甚至像Portecle这样的GUI。