当前位置: 首页 > 知识库问答 >
问题:

如何在Java将OpenSSH私钥转换为RSA私钥?

戚晨
2023-03-14

我有一个OpenSSH格式的私钥文件:

-----BEGIN OPENSSH PRIVATE KEY-----
...
-----END OPENSSH PRIVATE KEY-----

但我需要RSA格式:

-----BEGIN RSA PRIVATE KEY-----
...
-----END RSA PRIVATE KEY-----

在终端我会这样做:

ssh-keygen -p -m PEM -f my-openssh-file

但我需要用Java来做。

我尝试使用org.bouncycastle.openssl.PEMWriter,但我无法解决如何将我的输入键(作为输入字符串)转换为可传递给PEMWriter的Private ateKey对象。

共有1个答案

阎雪峰
2023-03-14

这实际上可以通过特立独行的Synergy Java SSH API实现。

我们SSHAPI的这个新分支支持新的OpenSSH私钥文件格式,因此您可以加载新密钥并将其转换为BouncyCastle支持的旧PEM格式。

您将需要以下maven依赖项:

    <dependency>
        <groupId>com.sshtools</groupId>
        <artifactId>maverick-synergy-client</artifactId>
        <version>3.0.0-SNAPSHOT</version>
    </dependency>

    <dependency>
        <groupId>com.sshtools</groupId>
        <artifactId>maverick-bc</artifactId>
        <version>3.0.0-SNAPSHOT</version>
    </dependency>

您还需要以下快照存储库,因为目前尚未正式发布API:

    <repository>
        <id>oss-snapshots</id>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
        <url>https://oss.sonatype.org/content/repositories/snapshots/</url>
    </repository>

首先,您可以使用以下方式加载新的OpenSSH私钥格式:

SshKeyPair key = SshKeyUtils.getPrivateKey(
          new File("id_rsa"), "passphrase");

然后,您可以通过将其传递到旧格式实现并通过getFormattedKey方法检索文本来转换它。

System.out.write(new OpenSSHPrivateKeyFileBC(
          key, "passphrase").getFormattedKey());

作为这个答案的一点背景,并宣布我是推荐项目的开发人员,Maverick Synergy是从J2SSH Maverick和Maverick遗留商业API继承而来的第三代API。Maverick Synergy完全可以作为LGPL许可的开源产品使用。

 类似资料:
  • 让我先解释一下我的问题。我从CA购买了一个证书,并使用以下格式生成csr和私钥: 有趣的是,在aws文档页面上,他们显示的示例私钥以“------开始RSA私钥-------”开头 有没有办法使用OpenSSL将我的私钥转换为RSA私钥?

  • 我需要用java生成openssh格式的密钥对。 我使用java中的KeyPairGenerator生成了一个公私密钥对,并将其保存到一个文件中: 但是,如果我尝试使用这个与ssh-keygen我得到一个"失败加载密钥private.key:无效格式" 如何将PKCS#8私钥转换为openssh格式或生成openssh格式的密钥对?

  • 问题内容: 我正在使用DKIM for JavaMail与DKIM签署外发邮件。 我的私人DKIM密钥是使用生成的,如下所示: DKIM for JavaMail库需要DER格式的私有DKIM密钥,如其自述文件所述: DKIM for JavaMail需要DER格式的私钥,您可以使用openssl转换PEM密钥: 我正在寻找一种避免必须使用openssl将密钥转换为DER格式的方法。相反,我想直接

  • 在Android中,我使用下面的代码将String转换为RSA私钥 https://www.devglan.com/online-tools/rsa-encryption-decryption 但是,当我使用这个网站时,我的代码不起作用。 https://8gwifi.org/RSAFunctionality?keysize=1024 我在Android studio中的代码是: 与第二个链接错误

  • 我将在序言中说,我对证书/密钥非常缺乏经验,我正在使用Mac。 我的问题是RSA和OPENSSH证书/密钥。我目前有一个有效的RSA证书/密钥,但我需要将它们转换为OpenSSH。从我的理解,我想做相反的这个线程:开放私钥到RSA私钥 我有一个以以下内容开头的文件: 但我需要将其转换为: 我已经尝试了和,但它没有输出我期望的头。 这可能吗? 如果可能的话,我可以用什么来执行这个转换,潜在的命令是什

  • 我正在使用DKIM for JavaMail来用DKIM对发送的邮件进行签名 我的私有DKIM密钥是通过,看起来像这样: DKIM for JavaMail库需要DER格式的专用DKIM密钥,如自述文件所述: DKIM for JavaMail需要DER格式的私钥,您可以使用openssl转换PEM密钥: 我正在寻找一种方法来避免使用openssl将我的密钥转换为DER格式。相反,我想直接在Jav