2016-05-09 12 views
-1

RSAアルゴリズムを使用してCipherを作成しました。使用するブロックサイズを取得するときに問題があります。私はencrypt.getBlockSize()とブロックサイズを取得しようとすると、私はJavadocのに応じて、アルゴリズムが使用答えは、「0」を取得RSA暗号のブロックサイズを取得する

 encrypt=Cipher.getInstance("RSA"); 
     encrypt.init(Cipher.ENCRYPT_MODE,myPublicKey); 

Cipherは、次のコードで宣言されていますRSAアルゴリズムの場合ではないブロック暗号ではありません。

デバッグモードでは、Cipherを調べると、 'spi'メンバーにバッファが存在し、そのサイズが実際のブロックサイズに対応しているように見えます。

なぜgetBlockSize()がspiのバッファサイズの代わりに "0"を返すのか分かりませんか?

+0

私はRSAがブロック暗号であるとは思わないので、0を返しても驚かないでしょう。AESとDESはブロック暗号です。 –

答えて

2

RSAはブロック暗号とはみなされません。ブロック暗号は、暗号化と復号化に同じ鍵を使用して対称です。キーサイズに関係なくブロックサイズが固定されているAESとは異なり、RSA暗号化または署名操作の出力はキーのサイズによって異なります。

RSA暗号テキストのサイズを知りたい場合は、使用するキーのexamine the modulusを使用してください。

+0

私は、RSAがブロック暗号と見なされていたと思っていました。なぜなら、データはブロック内の暗号に渡されなければならないからです(ビットレベルで計算データを持つストリーム暗号とは対照的です - 私はそれをWikipediaで読むと思います)。これらのブロックは、spiのバッファサイズに対応する最大サイズを持ち、このサイズは使用されるキーの長さに関連しています(512ビットキーの場合は53バイト、暗号化の場合は1024バイトキー、解読のために512バイトの鍵の場合は64バイト)。私はこの質問が今このフォーラムの範囲外であることは知っていますが、どのようにして最大サイズを決定できますか? – Zelig63

+1

@ Zelig63最大メッセージサイズは、パディングモードとキーサイズによって異なります。しかし、あなたがメッセージの大きさを心配しているなら、それは間違っているのです。 RSAは、データの直接暗号化ではなく、鍵のトランスポートまたはデジタル署名に使用する必要があります。両方の有効なユースケースでは、メッセージのサイズは固定されており、RSA操作に十分小さいことがわかっています。あなたはRSAでメッセージを暗号化しません。 AESでメッセージを暗号化した後、RSAでAESキーを暗号化します。 – erickson