RSA PrivateKey を取得し、正しい RSA PublicKey を返す Java 関数を探していますか?
あるいは、RSA PrivateKey/PublicKey が有効かどうかを教えてくれる関数はありますか?
RSA PrivateKey を取得し、正しい RSA PublicKey を返す Java 関数を探していますか?
あるいは、RSA PrivateKey/PublicKey が有効かどうかを教えてくれる関数はありますか?
秘密鍵を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();
}
これが必要な正当な理由が思いつきません。しかし、ここにあります:
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.");
}
}
他の人が指摘したように、 がある場合は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 );
タイプのオブジェクトがある場合は、次のRSAPrivateKey
2 つのことを行う必要があります。
privateKey.getModulus()
65537
です。モジュラスと公開指数を取得したら、PeteyB の回答に従うことができます。
私の知る限り、1つのキーが与えられた場合、RSAキーペアの他のキーを導出することはできません。これは、RSA を破ることに相当します。
ペアをテストするには、一方のキーを使用して何かを暗号化し、もう一方のキーを使用して復号化して、元の結果が返されるかどうかを確認します。