3

秘密鍵と公開鍵の実際の値を 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
4

3 に答える 3

2

ドキュメントを調べましたか?

以下を試してください:

get弾性率

getPublicExponent

getPrivateExponent

それらはすべてBigIntegerを返します

よりも順番に保存できます。

生のエンコード形式が役立つかどうかも確認してください。

于 2013-11-06T17:50:45.077 に答える
2

おそらく最も使いやすい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());
于 2013-11-10T05:15:22.833 に答える