如果你的公私钥文件不是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格式的公私钥对的有效性。
标签:JSch,jsch,公钥,公私,publicKeyFile,keygen,KeyPair,ssh,java8 From: https://www.cnblogs.com/756623607-zhang/p/17469567.html