1

BigInteger をインターフェイス キーに変換することは可能ですか?

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

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

4

1 に答える 1

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ます。ペアの各キーは同じ「モジュラス」を共有します。公開鍵には「公開指数」があり、秘密鍵には「秘密指数」があります。計算効率のために、秘密鍵は通常、追加の数値を含む「中国剰余定理形式」で格納されます。

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

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

(一部のプロバイダーでは、Cipher署名操作を実行するために a を使用し、キーを反転するときに正しいパディングを使用できますが、Signatureクラスが意図をより明確に表現する場合、これは推奨されないか、または必要ありません。)

于 2012-04-22T21:48:20.217 に答える