java8如何校验ssh-keygen生成的公私钥

发布时间 2023-06-09 16:32:26作者: N!CE波

如果你的公私钥文件不是PEM格式的,而是其他格式,如OpenSSH格式(通常以`id_rsa`和`id_rsa.pub`命名),你可以使用Java的`JSch`库来验证它们的有效性。下面是一个示例代码,演示如何使用`JSch`库验证OpenSSH格式的公私钥对:

首先,你需要在项目中引入JSch库的依赖。你可以使用Maven或手动下载并添加JAR文件到你的项目。

<dependency>
<groupId>com.jcraft</groupId>
<artifactId>jsch</artifactId>
<version>0.1.55</version>
</dependency>

接下来,你可以使用以下代码进行公私钥对的验证:

import com.jcraft.jsch.JSch;
import com.jcraft.jsch.KeyPair;

import java.io.ByteArrayOutputStream;
import java.io.InputStream;

public class SSHKeyValidationExample {
public static void main(String[] args) {
String privateKeyFile = "/path/to/private_key";
String publicKeyFile = "/path/to/public_key";

try {
JSch jsch = new JSch();

// 加载私钥
KeyPair privateKey = KeyPair.load(jsch, privateKeyFile);

// 加载公钥
byte[] publicKeyBytes = readPublicKey(publicKeyFile);
KeyPair publicKey = KeyPair.load(jsch, null, publicKeyBytes);

// 校验公私钥对
boolean isValid = privateKey.getFingerPrint().equals(publicKey.getFingerPrint());
if (isValid) {
System.out.println("SSH key pair is valid.");
} else {
System.out.println("SSH key pair is not valid.");
}

// 清理资源
privateKey.dispose();
publicKey.dispose();
} catch (Exception e) {
e.printStackTrace();
}
}

private static byte[] readPublicKey(String publicKeyFile) throws Exception {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
try (InputStream inputStream = new java.io.FileInputStream(publicKeyFile)) {
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
}
return outputStream.toByteArray();
}
}

 

在上面的代码中,我们使用`KeyPair.load()`方法加载私钥和公钥文件,并使用`getFingerPrint()`方法获取公钥的指纹。然后,我们比较私钥和公钥的指纹来验证它们是否匹配。

请确保将适当的私钥和公钥文件路径传递给`privateKeyFile`和`publicKeyFile`变量。根据实际情况修改路径。

这样,你就可以使用`JSch`库来验证OpenSSH格式的公私钥对的有效性。