2009-08-06 14 views
1

RSAで文字列を復号しようとしています。それはiPhone上でC#で暗号化されており、私は秘密鍵を持っています。これは愚かな問題のように思えますが、私が見たすべての例では秘密鍵の生成が示されています。私は秘密鍵を持っています(それは16進のバイト[]です)。 PKCS#1のパディングを使用しています。私のやり方を理解できない部分は、既に持っている秘密鍵でjava.security.Keyオブジェクトを作成することです。RSA暗号化解除コード

私は2つの部分に秘密鍵を与えなければなりません...モジュラスと指数?

ありがとうございます。

+0

これ以上の情報が必要です。キーの表現方法はたくさんあります。 DER? PEM? PKCS#8? –

+0

これは、PKCS#1のパディングを使用しています...それはちょうどCipherのインスタンスを変更する必要があります、そうですか? –

+0

また、秘密鍵自体が暗号化されている可能性があります(これはかなり一般的です)。その場合、暗号化アルゴリズムとパスフレーズを知る必要があります。 –

答えて

2

RSAPrivateKeySpecを経由する必要があります。例は次のとおりです(thisに基づいています):

 BigInteger n = new BigInteger(nBytes); 
     BigInteger p = new BigInteger(pBytes); 
     RSAPrivateKeySpec privateSpec = new RSAPrivateKeySpec(n, p); 
     KeyFactory kf = KeyFactory.getInstance("RSA"); 
     Key privateKey = kf.generatePrivate(privateSpec); 
+0

私の問題は、秘密鍵が16進数のバイト配列として与えられていると思います。0x12、0xe3などです。解決策はモジュラスと指数が必要だと思います。 –

+0

実際には、適切なコンストラクタがリンクされているライブラリのSshRsaPrivateKeyのように見えます。 http://www.codase.com/search/display?file=L2dlbnRvbzIvdmFyL3RtcC9yZXBvcy9zb3VyY2Vmb3JnZS9zc2h0b29scy9qMnNzaC0wXzJfNy1zcmNfemlwL2oyc3NoL3NyYy9jb20vc3NodG9vbHMvajJzc2gvdHJhbnNwb3J0L3B1YmxpY2tleS9yc2EvU3NoUnNhUHJpdmF0ZUtleS5qYXZh&lang=java&off=2719+2746+ –

+0

だから、それはありません...私はそれを試してみるだろう。助けてくれてありがとうメレディスとローレンス。 –