当我尝试在下面的代码中打印为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
答案 0 :(得分:2)
对于公钥,modulus
和exponent
是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);