JSch:从私钥文件创建公钥

时间:2019-07-16 13:15:21

标签: java jsch private-key public-key

我喜欢通过QR代码(不包括最佳安全实践)传输私钥,该私钥是作为KeyPair的一部分创建的,之后需要恢复KeyPair。因此

JSch jsch = new JSch();
KeyPair keypair = KeyPair.genKeyPair(jsch, KeyPair.RSA, 4096);

ByteArrayOutputStream prvstream = new ByteArrayOutputStream();
keypair.writePrivateKey(prvstream);
prvstream.close();

ByteArrayOutputStream pubstream = new ByteArrayOutputStream();
keypair.writePublicKey(pubstream, null /* key comment */);
pubstream.close();

byte[] prv_data = prvstream.toByteArray();
byte[] pub_data = pubstream.toByteArray();

// prv_data is transferred via QR-Code here

KeyPair keypair2 = KeyPair.load(jsch, prv_data, null);

ByteArrayOutputStream prvstream2 = new ByteArrayOutputStream();
keypair2.writePrivateKey(prvstream2);
prvstream2.close();

ByteArrayOutputStream pubstream2 = new ByteArrayOutputStream();
keypair2.writePublicKey(pubstream2, null /* key comment */));
pubstream2.close();

byte[] prv_data2 = prvstream2.toByteArray();
byte[] pub_data2 = pubstream2.toByteArray();

if (pub_data.equals(pub_data2) {
    // success
} else {
    // we hit failure here every time.
}

1 个答案:

答案 0 :(得分:1)

pub_data.equals(pub_data2)并没有您的想法。它比较引用,而不是数组内容。您要使用Arrays.equals(pub_data, pub_data2)

请参见equals vs Arrays.equals in Java


顺便说一句,从技术上讲,您不能从私钥创建公钥。但是,由于KeyPair.writePrivateKey实际上写的是整个密钥对,而不仅是私钥,它自然也包含公钥。

相关问题