当我尝试在下面的代码中打印为RSA生成的公钥和私钥时,我得到了什么?

时间:2017-03-22 11:15:00

标签: java rsa pki

当我尝试在下面的代码中打印为RSA生成的公钥和私钥时,我得到了什么?

public void generateKeyPair()throws Exception{
    KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
    keyGen.initialize(1024);
    KeyPair key = keyGen.generateKeyPair(); 
    System.out.println("Private Key --> "+key.getPrivate());
    System.out.println("Public Key --> "+ key.getPublic());

}

输出:

Private Key --> sun.security.rsa.RSAPrivateCrtKeyImpl@3201e
Public Key --> Sun RSA public key, 1024 bits
modulus:     91070638360884489717846387624081331865380920530817450364127225655147956614794217905486935019170980669357616099533814798328666299188081771295145969332740783420682208946757921176081598083665454855067910689297215183406707874995244612816580868221470575486438389243678546960355939828269782848832295142018678264741
public exponent: 65537

2 个答案:

答案 0 :(得分:2)

对于公钥modulusexponent是RSA公钥的2个组件,因此这是以可读方式而非base64编码表示的有趣信息(就像你在文件中有密钥一样)。 1024 bits部分是键的长度,可以感知它的强度。

对于私钥,让任何有关密钥的信息泄露到toString中是没有意义的。这只是Object.toString()的简单默认实现。

答案 1 :(得分:1)

您可以将私钥和公钥编码为base64,以便您可以 打印它。

        import org.apache.commons.codec.binary.Base64;

        KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
        keyGen.initialize(1024);
        KeyPair key = keyGen.generateKeyPair();
        byte[] privateKey = key.getPrivate().getEncoded();
        byte[] publicKey = key.getPublic().getEncoded();
        String encodedPrivateKey = Base64.encodeBase64String(publicKey);
        String encodedPublicKey = Base64.encodeBase64String(privateKey);