1

私のパートナーは、次のような RSA 公開鍵をくれました。

MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCSK+roLfbUYf6PGNIf6Ej8R5EqSTjlRABTu7T0FxR/B6iurI80jktW9+zKu4jFnFJ8oYx24raD3x5KhJZR2VCBEEbtYpPq/5E25v+LIkFbx8sNkMvEACZdAWyeQcEookGfKDER4PGrB35bntcO2SnItTZc8BOI3jAOBXTeBO16NwIDAQAB

公開鍵にモジュラスと指数があることは知っています。xml RSA キー ファイルを見てきました。しかし、この単純な文字列からそれらの部分を抽出する方法がわかりません。

私がやろうとしていることを達成する方法を誰かが知っていますか?

4

2 に答える 2

1

Java をプログラミング言語として使用すると仮定して、GregS の回答を完成させるには:

  1. Base64 エンコーディングをバイナリに変換する必要があります。いくつかの Base64 デコーダーがあります。たとえば、これは「パブリック ドメイン」のように見えるため、自由に再利用できます。自分で実装することもできます。難しいことではありません。ウィキペディアには、そのための便利なリンクがあります。
  2. SubjectPublicKeyInfoASN.1 構造を使用してバイナリ BLOB をデコードします。これは非常に簡単ではありませんが (ASN.1 をマスターしない限り)、既存のコードを使用できます。特に、Java はそれを直接行う方法を知っています。

Java での公開鍵のデコードは次のようになります (バイナリ blob が variable にあると仮定しますblob)。

KeyFactory kf = KeyFactory.getInstance("RSA");
KeySpec ks = new X509EncodedKeySpec(blob);
RSAPublicKey pk = (RSAPublicKey)kf.generatePublic(ks);

RSAPublicKeyインスタンスから、自明のgetModulus()andメソッドがあります。関連するクラスは、getPublicExponent()packagesおよび. 公開鍵の場合、これにより次の結果が得られます。java.securityjava.security.interfacesjava.security.spec

modulus         = 102645155313298195029358862270152655993457886674545775623230610032728692959011417523892551564448476401788726191516935717690886291325065114613951136136194912439244754958152467056511740824446734443711392654194943771385565670988939260236433577393483222184597978937921816958725758100559250155638540637401770719799
public exponent = 65537
于 2010-02-02T14:30:37.070 に答える
1

これは、RSA 公開鍵の base-64 でエンコードされた SubjectPublicKeyInfo ( RFC 5280を参照) です。ご指摘のとおり、RSA係数と公開指数が含まれています。

于 2010-02-02T12:33:56.987 に答える