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

用Java中的ssh-keygen命令从私钥中提取公钥

方河
2023-03-14

我正在尝试使用Java的runtime.getruntime().exec()使用ssh-keygen linux实用工具从私钥中提取公钥。

当我在终端上运行这个命令时,它完美无缺地工作,我能够从RSA私钥中提取公钥

ssh-keygen -y -f /home/useraccount/private.txt > /home/useraccount/public.txt
Process p = Runtime.getRuntime().exec("ssh-keygen -y -f /home/useraccount/private.txt > /home/useraccount/public.txt");
p.waitFor();

共有1个答案

石喜
2023-03-14

不是一个真正的答案,因为我没有时间测试,但基本的选择:

// example code with no exception handling; add as needed for your program

String cmd = "ssh-keygen -y -f privatefile";
File out = new File ("publicfile"); // only for first two methods

//// use the stream ////
Process p = Runtime.exec (cmd);
Files.copy (p.getInputStream(), out.toPath());
p.waitFor(); // just cleanup, since EOF on the stream means the subprocess is done

//// use redirection ////
ProcessBuilder b = new ProcessBuilder (cmd.split(" "));
b.redirectOutput (out);
Process p = b.start(); p.waitFor();

//// use shell ////
Process p = Runtime.exec ("sh", "-c", cmd + " > publicfile");
// all POSIX systems should have an available shell named sh but 
// if not specify an exact name or path and change the -c if needed 
p.waitFor(); 
 类似资料:
  • 我使用命令“ssh-keygen-t rsa”创建了一个没有密码的公钥,我打算将其用于github,但我错误地发送了公钥和私钥...... 这到底意味着什么?

  • 我正在尝试使用openssl生成一个安全的私钥和公钥,以便与我的云托管提供商一起使用,但当我这样做时,openssl的公钥输出未被识别。 生成RSA私钥后,2048位长模,然后 它编写了RSA公钥。输出如下所示: 这是标准格式,它非常适合其他用途,但所有云和托管服务提供商都需要这样的公钥: 这是他们识别的唯一有效格式。 我知道ssh-keygen可以轻松完成所有这些,但我正在使用当前最新的open

  • ssh-keygen和openssl是否可能从同一个私钥生成两个不同的公钥?命令与命令生成的公钥(和之间的内容)不同。

  • 问题内容: 我记得很久以前使用OpenSSL进行过此操作,但是我想知道是否可行以及如何进行,我从未在Java上使用过密码学。 问题答案: 您不能直接从另一个生成任何一个密钥。从数学上讲这是不可能的。如果你有一个含有密钥团 两者 的公钥和私钥,你可以提取它们的相对轻松的任何一个。 编辑,2017年: 多年之后,人们对加密技术有了更深入的了解,现在我很清楚这个答案并不正确。 引用维基百科: 公用密钥由

  • 问题内容: 谁能给我sshj中的私钥/公钥身份验证示例? 在sshj中,等效的命令行是什么, 我试过了(省略了错误处理), 但在日志语句中,我看到了 谢谢 问题答案: 尝试KeyPairWrapper像这样使用: 使用BouncyCastle提供程序,您可以使用类似的方法从PKCS8 PEM(为混乱的代码道歉)中提取KeyPair。

  • 我在将包含RSA公钥的字符串转换为java.security公钥类型时遇到了麻烦,该RSA公钥是我在cygwin中使用SSh-keygen生成的。 那么,我假设我的问题是两个密钥之间有什么区别,以及我如何才能成功地将第一个转换为可用的PublicKey对象?