gpt4 book ai didi

java - 从 .pub 格式的公钥创建 JSch HostKey 实例

转载 作者:行者123 更新时间:2023-11-29 03:10:34 24 4
gpt4 key购买 nike

我正在尝试使用 JSch 将文件从 Windows 机器发送到 Linux 机器。因此,我将主机公钥从 Linux 机器复制到我的 Windows 机器,并将该 key 添加到我的 HostKeyRepository。但出于某种原因,我收到“无效 key 类型”异常。这是我的代码:

HostKeyRepository repo = jsch.getHostKeyRepository();
File file = new File("D:\\Uni\\Arbeit\\ssh_host_rsa_key.pub");
byte[] HK = Files.readAllBytes(file.toPath());
Session session=jsch.getSession(user, host, 22);
session.setPassword(password);
HostKey hk = new HostKey(null, HK);
repo.add(hk, null);
session.connect();

最佳答案

.pub文件格式:

<type> <base64-encoded-public-key> <comment>

HostKey constructor 的内容只是公钥部分,采用二进制形式(不是 base64 编码)。

使用 JSch Util.fromBase64()转换 base64-encoded-public-key属于 byte[] .

static byte[] fromBase64(byte[] buf, int start, int length) 

您还可以检查 known_hosts 的 JSch 实现KnownHosts.setKnownHosts(InputStream input) 中的文件解析.

known_hosts文件的格式与 .pub 相似文件,除了有一个额外的 hostname前面的部分和comment通常不包括:

<hostname> <type> <base64-encoded-public-key> [comment]

请注意,如果您知道要解析文件的一种特定格式,则您的实现不必像他们那样复杂。


因此请阅读 File 中的行字符串,删除 <type><comment>并使用此表达式(取自 KnownHosts.setKnownHosts ,关键是 <base64-encoded-public-key> 部分):

Util.fromBase64(Util.str2byte(key), 0, key.length())

关于java - 从 .pub 格式的公钥创建 JSch HostKey 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29604333/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com