1

以下のような ssh 公開鍵から係数と pubExp を取得することは可能ですか?

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC9t1iUplXCsaamE3QPxiB4G1BTZHH4oK4Ti2pHgfOEDLsVWrhycX+f8GbNnRATONkGjoDH9WWku1Eibbd2qpSfRrYowVmE85tEqXrT1mjPMSXrdKrLa4a9NLgHtaROZPNTxkuBHjdQkfgMnId/ryUw3maj+kHW1lUEx+wpALyLNTNJP0RFgO72x47wNELvolcZttaSTqrncH1ClcY2WQ4kmfOvzAgo1sRtRolc/6k17Oeo7eQRWgT4IwjLS9hYnXNicCn5Hg313iryJJ6Zq/eR/ormM7t8LMH8479qzdxinSk3GNCCw3xRDzYD/zcLsAGKwUnA+0g0JUdxEzQpGMHr user@mc-s08347cdc1.local

上記のキーから何らかの方法でこれらのパラメーターを取得する必要があるため、以下のコードを実行して Java で公開キーを生成および取得できます。

RSAPublicKeySpec ks = new RSAPublicKeySpec(modulus, pubExp);
RSAPublicKey pubKey = (RSAPublicKey)keyFactory.generatePublic(KeySpec);
4

1 に答える 1

2

SSH キーはRFC 4253で定義された形式を使用しているようです。そのため、単純にデータを base64 でデコードし (たとえば、Apache Commons Codec ライブラリを使用)、バイナリ結果を自分で解析できます。

これは、base64 でデコードされた文字列の出力です (デコーダーが機能するには、2、3、または 4 つの「=」文字を後置する必要がある場合があります。base64 でエンコードされた 4 文字の倍数が必要です):

000000077373682D727361000000030100010000010100BDB75894A655C2B1A6A613740FC620781B50536471F8A0AE138B6A4781F3840CBB155AB87271

それを分析してみましょう (最初の部分は、ビッグ エンディアン形式の 4 バイトの長さです)。

00000007 7373682D727361 // "ssh-rsa" string in ASCII
00000003 010001 // public exponent, the fourth number of Fermat or 65537 in decimals
00000101 00BDB75894A655C2B1A6A613740FC620781B50536471F8A0AE138B6A4781F3840CBB155AB87271

最後の部分はモジュラスです。ライブラリが符号付き整数を使用しているように見えるため、128 ではなく 129 バイトです。1024 ビット モジュラスは常に 1 に設定された最初のビットで始まるため00、符号なし表現の左側に値付きのパディング バイトがあることを確認できます。

幸せなコーディング、hereからいくつかの情報を取得しました。

于 2013-05-23T23:36:40.430 に答える