11

RSA PrivateKey を取得し、正しい RSA PublicKey を返す Java 関数を探していますか?

あるいは、RSA PrivateKey/PublicKey が有効かどうかを教えてくれる関数はありますか?

4

5 に答える 5

13

秘密鍵をRSAPrivateCrtKeyオブジェクトとして持っている場合は、モジュラスだけでなく公開指数も取得できます。

次に、次のように公開鍵を作成できます。

RSAPublicKeySpec publicKeySpec = new java.security.spec.RSAPublicKeySpec(modulus, exponent);   
try {   
     KeyFactory keyFactory = KeyFactory.getInstance("RSA");   

     PublicKey publicKey = keyFactory.generatePublic(publicKeySpec);   
} catch (Exception e) {   
     e.printStackTrace();   
} 
于 2012-07-05T16:16:21.323 に答える
5

これが必要な正当な理由が思いつきません。しかし、ここにあります:

static boolean isValidRSAPair(KeyPair pair)
{
  Key key = pair.getPrivate();
  if (key instanceof RSAPrivateCrtKey) {
    RSAPrivateCrtKey pvt = (RSAPrivateCrtKey) key;
    BigInteger e = pvt.getPublicExponent();
    RSAPublicKey pub = (RSAPublicKey) pair.getPublic();
    return e.equals(pub.getPublicExponent()) && 
      pvt.getModulus().equals(pub.getModulus());
  }
  else {
    throw new IllegalArgumentException("Not a CRT RSA key.");
  }
}
于 2012-07-05T16:34:18.003 に答える
1

他の人が指摘したように、 がある場合はRSA CRT KEY、そこから公開鍵を抽出できます。ただし、実際には、純粋な秘密鍵から公開鍵を取得することはできません。

その理由は簡単です。RSA 鍵を生成するとき、実際には秘密鍵と公開鍵の間に違いはありません。1 つが非公開に選択され、残りの 1 つが公開されます。

したがって、純粋な秘密鍵から公開鍵を計算できる場合、定義により、公開鍵から秘密鍵を計算できます...

両方ある場合は、実際に一致するかどうかを簡単にテストできます。

RSAPublicKey rsaPublicKey = (RSAPublicKey) publicKey;
RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) privateKey;
return rsaPublicKey.getModulus().equals( rsaPrivateKey.getModulus() )
  && BigInteger.valueOf( 2 ).modPow(
  rsaPublicKey.getPublicExponent().multiply( rsaPrivateKey.getPrivateExponent() )
    .subtract( BigInteger.ONE ), 
  rsaPublicKey.getModulus() ).equals( BigInteger.ONE );
于 2015-02-25T15:46:17.197 に答える
0

タイプのオブジェクトがある場合は、次のRSAPrivateKey2 つのことを行う必要があります。

  1. モジュラスを取得します。簡単:privateKey.getModulus()
  2. 公開指数を計算します。これは少しトリッキーですが、不可能ではありません。public exponent の定義を参照してください。通常、公開指数は65537です。

モジュラスと公開指数を取得したら、PeteyB の回答に従うことができます。

于 2013-07-07T13:03:05.673 に答える
-4

私の知る限り、1つのキーが与えられた場合、RSAキーペアの他のキーを導出することはできません。これは、RSA を破ることに相当します。

ペアをテストするには、一方のキーを使用して何かを暗号化し、もう一方のキーを使用して復号化して、元の結果が返されるかどうかを確認します。

于 2012-07-05T13:33:04.587 に答える