我可以在不使用 JSch 解锁的情况下获取锁定的 SSH 私钥的类型或指纹吗?
Can I get the type or fingerprint of a locked SSH private key without unlocking it using JSch?
我可以得到 type (RSA
, DSA
, ECDSA
, ED25519
...) 或者指纹 密码保护的私人 ssh 密钥,无需使用 JSch 解锁(就像在 Linux 中使用 ssh-keygen -l -f <key_file>
)?
我正在编写一个 Android 应用程序,JSch 几乎是我设法使用 Android 的唯一库,所以它有使用 JSch 或手动完成。
使用KeyPair.load
加载密钥。
然后 KeyPair.getKeyType
and KeyPair.getFingerPrint
访问其属性。
JSch jSch = new JSch();
KeyPair keypair = KeyPair.load(jSch, filename);
System.out.println(keypair.getKeyType());
System.out.println(keypair.getFingerPrint(jSch));
Martin Prikryl 的回答是正确的,但是我问了这个问题,因为当我打电话给 getKeyType()
时收到 IllegalStateException
消息 encrypted key has not been decrypted yet.
所以我认为你无法获取有关锁定密钥的信息。经过更多的试验和错误后,我发现问题是特定于 JSch 的分支,我使用 (com.github.mwiede:jsch:0.2.1
) 添加了对 ED25519
键的支持,并且问题特定于 ED25519
个键。我这样解决了我的问题:
private static int getKeyType(Path keyFilePath) {
try {
Path keyFile = keyFilePath;
final byte[] key = Files.readAllBytes(keyFile);
final JSch jSch = new JSch();
final KeyPair keyPair = KeyPair.load(jSch, key, null);
return keyPair.getKeyType();
} catch (final IOException | JSchException e) {
System.err.println(e.getMessage());
return 0; // 0 is the key type of ERROR defined in the KeyPair class
} catch (IllegalStateException e) {
if (e.getMessage().equals("encrypted key has not been decrypted yet."))
return 5; // 5 is the key type of ED25519 defined in the KeyPair class
e.printStackTrace();
return 0;
}
}
我可以得到 type (RSA
, DSA
, ECDSA
, ED25519
...) 或者指纹 密码保护的私人 ssh 密钥,无需使用 JSch 解锁(就像在 Linux 中使用 ssh-keygen -l -f <key_file>
)?
我正在编写一个 Android 应用程序,JSch 几乎是我设法使用 Android 的唯一库,所以它有使用 JSch 或手动完成。
使用KeyPair.load
加载密钥。
然后 KeyPair.getKeyType
and KeyPair.getFingerPrint
访问其属性。
JSch jSch = new JSch();
KeyPair keypair = KeyPair.load(jSch, filename);
System.out.println(keypair.getKeyType());
System.out.println(keypair.getFingerPrint(jSch));
Martin Prikryl 的回答是正确的,但是我问了这个问题,因为当我打电话给 getKeyType()
时收到 IllegalStateException
消息 encrypted key has not been decrypted yet.
所以我认为你无法获取有关锁定密钥的信息。经过更多的试验和错误后,我发现问题是特定于 JSch 的分支,我使用 (com.github.mwiede:jsch:0.2.1
) 添加了对 ED25519
键的支持,并且问题特定于 ED25519
个键。我这样解决了我的问题:
private static int getKeyType(Path keyFilePath) {
try {
Path keyFile = keyFilePath;
final byte[] key = Files.readAllBytes(keyFile);
final JSch jSch = new JSch();
final KeyPair keyPair = KeyPair.load(jSch, key, null);
return keyPair.getKeyType();
} catch (final IOException | JSchException e) {
System.err.println(e.getMessage());
return 0; // 0 is the key type of ERROR defined in the KeyPair class
} catch (IllegalStateException e) {
if (e.getMessage().equals("encrypted key has not been decrypted yet."))
return 5; // 5 is the key type of ED25519 defined in the KeyPair class
e.printStackTrace();
return 0;
}
}