Java从KeyPair对象中检索公钥的实际值

我想问一下如何从KeyPair对象中检索私钥和公钥的实际值,因为我需要将它们导出并保存在数据库中。

KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA"); kpg.initialize(1024); KeyPair keyPair = kpg.genKeyPair(); System.out.println("Public key " + keyPair.getPublic()); System.out.println("Private key " + keyPair.getPrivate()); 

输出是:

 Public key Sun RSA public key, 1024 bits modulus: 105712092415375085805423498639048173422142354311030811647243014925610093650322108853068042919471115278002432342007597147610508132502035047888382465733153739247741208519707861808073276783311634229563965825609200080862631487160732889423591650215084096832366499080850540875321197564283324922935557797293830551071 public exponent: 65537 Private key sun.security.rsa.RSAPrivateCrtKeyImpl@35e71 

使用keypair.getPublic.getEncoded()keypair.getPrivate.getEncoded()可能最简单:

RSA私钥以PKCS#8格式编码,公钥以X.509格式编码。

 KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA"); kpg.initialize(2048); KeyPair keyPair = kpg.generateKeyPair(); PublicKey pub = keyPair.getPublic(); PrivateKey prv = keyPair.getPrivate(); byte[] pubBytes = pub.getEncoded(); byte[] prvBytes = prv.getEncoded(); // now save pubBytes or prvBytes // to recover the key KeyFactory kf = KeyFactory.getInstance("RSA"); PrivateKey prv_recovered = kf.generatePrivate(new PKCS8EncodedKeySpec(prvBytes)); PublicKey pub_recovered = kf.generatePublic(new X509EncodedKeySpec(pubBytes)); System.out.println("Private Key: \n" + prv_recovered.toString()); System.out.println("Public Key: \n" + pub_recovered.toString()); 

您可以简单地RSAPrivateKeyRSAPrivateKeyRSAPrivateKey 。 完成后,您可以访问这些类的方法。

 RSAPublicKey pubKey = (RSAPublicKey) keyPair.getPublic()); BigInteger modulus = pubKey.getModulus(); 

等等

你看过文档了吗?

请尝试以下方法:

getModulus

getPublicExponent

getPrivateExponent

他们都返回BigInteger

而不是可以存储。

另请参阅原始编码格式是否有帮助。