首页 > 编程语言 >java8如何校验ssh-keygen生成的公私钥

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

时间:2023-06-09 16:34:22浏览次数:50  
标签:JSch jsch 公钥 公私 publicKeyFile keygen KeyPair ssh java8

如果你的公私钥文件不是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

相关文章

  • 解决ssh连接docker容器环境变量无效的问题
    问题缘由:因在docker容器中的linux系统输入nvcc等命令都是有效的,但通过ssh连接到docker容器内,就存在该命令未找到等问题,查询资料得知,这是因为通过ssh连接docker容器后环境变量发生了变化,修改方法:解决方法:更改字段分隔符,使之仅仅遇到换行时分割/etc/profile中添加以下代码即可......
  • ssh互信
    要在三台Linux主机之间配置SSH互信,可以按照以下步骤进行操作:确保每台主机上都已安装了OpenSSH服务器和客户端。可以使用以下命令检查是否已安装:ssh-V如果未安装,请根据操作系统的不同使用适当的包管理器进行安装。例如,在Ubuntu上可以使用以下命令安装:sudoapt-getinstall......
  • Alpine开启ssh登录
    Alpine开启ssh登录1、登录Alopin,用户名root,密码为空。修改密码:passwd,修改后要记好,后面要用的。(也可以添加用户kk:useradd-Skk,修改kk的密码:passwdkk)2、apkaddopenssh3、如果之前没有修改密码,就必须vi/etc/ssh/sshd_config,添加PermitRootLoginyes或者用一条命令:echo'PermitR......
  • 如何修复 SSH Client_loop: send disconnect: Broken pipe Error
    动动发财的小手,点个赞吧!SSH是SecureShell的缩写,是一种远程网络协议,用于通过TCP/IP网络安全地连接到远程设备,例如服务器和网络设备。它是一种加密网络协议,可提供强大的加密技术和散列法来保护网络上两个设备之间的通信。SSH使用两种主要的认证方式:密码认证和公钥认证。使......
  • amazon linux ssh 使用密码登录
    amazonlinux ssh 使用密码登录1、使用AWS控制台创建的密钥对或者直接通过网页登录注意:使用pem私钥不允许直接登录root用户,只能登录默认用户例如:ec2-user,ubuntu等等2、创建root密码sudopasswdroot3、切换到root用户suroot4、修改sshd_config文件vim/etc/ssh/sshd_conf......
  • SSH配置及连接
    常用命令#1.使用ssh连接远程主机#最简单的用法只需要指定用户名和主机名参数即可,主机名可以是IP地址或者域名。sshuser@hostname#2.ssh连接到其他端口#SSH默认连接到目标主机的22端口上,可以使用-p选项指定端口号ssh-p10022user@hostname#3.使用ssh在远程主......
  • java8函数式编程
    1.什么是函数式编程每个人对函数式编程的理解不尽相同。但其核心是:在思考问题时,使用不可变值和函数,函数对一个值进行处理,映射成另一个值。2.Lambda表达式Stream<String>stream=Stream.of("张三","李四");2.1collect(toList())List<String>names=stream.collect(Colle......
  • 如何为git配置ssh(0废话)
    启动ssh-agent用管理员模式在powershell中:Set-Service-Namessh-agent-StartupTypeautomaticssh-agent查看已有密钥,如果你已经有密钥,就直接跳到第五步ssh-add-l生成密钥,狂按回车即可ssh-keygen-ted25519本地添加密钥ssh-add远程添加密钥登录你的远......
  • Linux系统下如何保持进程在SSH客户端断开后仍继续运行?
    使用场景在Linux系统中,在执行一些运行时间比较长的任务时,必须等待执行完毕才能断开SSH连接或关闭客户端软件,否则可能会导致执行中断。本文介绍两种保障程序在您退出登录后持续运行的方法。方法1:使用nohup命令1.命令格式nohup,可以使运行的命令忽略SIGHUP信号。因此,即使退出登录......
  • Java8 时间日期库的使用方法
    1、Java8新的时间日期库的20个使用示例http://ifeve.com/20-examples-of-date-and-time-api-from-java8/2、Java8日期/时间(DateTime)API指南http://www.importnew.com/14140.html3、JAVA8:健壮、易用的时间/日期APIhttp://www.importnew.com/14857.html......