2012-04-22 8 views
0

BigIntegerをInterface Keyに変換することはできますか?BigInteger to Key

http://docs.oracle.com/javase/7/docs/api/java/security/Key.html

私は、RSAアルゴリズムを実装しようとしている、とのKeyPairGeneratorを使用して自分自身ではなく、OSのキーを生成しています。ただし、Cipherを使用してメッセージを暗号化する場合は、Keyが必要です。 BigIntegerをKeyにキャストしようとしましたが、これは問題ありませんでした。

+1

はい、可能です。 –

+0

申し訳ありません - 質問に詳細を追加しました。 – Joseph

+1

確かに、 'Key'は' BigInteger'ではないので、キャストできません。 Javaでのキャストは変換演算子ではありません(プリミティブ型を除く)。インスタンス化したいと思う 'Key 'を実装する具体的な具体的なクラスを知る必要があります。これはおそらく研究の始まりに過ぎません。 –

答えて

0

モジュラスと公開指数からRSAPublicKey実装を作成する例を示します。

KeyFactory factory rsa = KeyFactory.getInstance("RSA"); 
BigInteger n = ... ; /* modulus */ 
BigInteger e = ... ; /* public exponent */ 
RSAPublicKeySpec spec = new RSAPublicKeySpec(n, e); 
RSAPublicKey pub = (RSAPublicKey) factory.generatePublic(spec); 
Cipher enc = Cipher.getInstance("RSA"); 
enc.init(Cipher.WRAP_MODE, pub); 
byte[] encryptedContentKey = enc.wrap(secret); 

RSA鍵ペアは、BigIntegerオブジェクトの形でいくつかの数字を含むそれぞれがプライベート鍵公開鍵です。ペアの各キーは同じ「モジュラス」を共有します。公開鍵は「公開指数」を有し、秘密鍵は「秘密指数」を有する。計算効率のために、秘密鍵は通常、「中国剰余定理形式」で格納され、追加の数が含まれています。

暗号化する場合は、PublicKeyをのinit()メソッドに渡す必要があります。

解読する場合はCipherinit()メソッドにPrivateKeyを渡す必要があります。

は( Signatureクラスがより明確に自分の意図を表現する際に一部のプロバイダでは、キーを逆にするときに、署名操作を実行し、正しいパディングを使用するように Cipherを使用することができますが、これは必要に応じてお勧めするかしない。)