Cipher
クラスのサービス・プロバイダ・インタフェース (SPI)を定義します。 特定の暗号アルゴリズムの実装を提供する各暗号化サービス・プロバイダは、このクラスのすべての抽象メソッドを実装する必要があります。
このCipherSpi
クラスのインスタンスをカプセル化するCipher
のインスタンスを生成するには、アプリケーションはCipher
エンジン・クラスのgetInstance
ファクトリ・メソッドの1つを呼び出して、要求された変換を指定します。 アプリケーションは、必要に応じて、プロバイダの名前を指定することもできます。
変換は、指定された入力に対して実行し、何らかの出力を生成する操作(または操作のセット)を説明する文字列です。 変換には、常に暗号アルゴリズム(例、AES)の名前が含まれ、フィードバック・モードとパディング・スキームが続きます。
変換は、次の書式で記述されます。
- "algorithm/mode/padding"または
- "algorithm"
(後者の場合、モードおよびパディング方式には、プロバイダ固有のデフォルト値が使用されます。) たとえば、次は有効な変換です。
Cipher c = Cipher.getInstance("AES/CBC/PKCS5Padding");
プロバイダは、algorithm/mode/paddingの各組み合わせに対して個別のクラスを提供するか、あるいはalgorithm、algorithm/mode、またはalgorithm//padding (二重スラッシュに注意)に対応するサブ変換を表すより汎用のクラスを提供することができます。汎用のクラスを提供する場合、要求されたモードやパディングは、プロバイダのCipherSpi
のサブクラスのengineSetMode
およびengineSetPadding
メソッドを呼び出す、Cipher
のgetInstance
メソッドにより自動的に設定されます。
プロバイダのマスター・クラス内のCipher
プロパティの形式は、次のどれかになります。
-
// provider's subclass of "CipherSpi" implements "algName" with // pluggable mode and padding
Cipher.
algName -
// provider's subclass of "CipherSpi" implements "algName" in the // specified "mode", with pluggable padding
Cipher.
algName/mode -
// provider's subclass of "CipherSpi" implements "algName" with the // specified "padding", with pluggable mode
Cipher.
algName//padding -
// provider's subclass of "CipherSpi" implements "algName" with the // specified "mode" and "padding"
Cipher.
algName/mode/padding
たとえば、プロバイダは、AES/ECB/PKCS5Padding、AES/CBC/PKCS5Padding、AES/CFB/PKCS5Padding、さらにはAES/OFB/PKCS5Paddingをそれぞれ実装するCipherSpi
のサブクラスを提供できます。 このプロバイダは、マスター・クラス内に次のCipher
プロパティを保持します。
-
Cipher.
AES/ECB/PKCS5Padding -
Cipher.
AES/CBC/PKCS5Padding -
Cipher.
AES/CFB/PKCS5Padding -
Cipher.
AES/OFB/PKCS5Padding
別のプロバイダは、上の各モードのためのクラス(つまり、ECB、CBC、CFB、OFBのためにそれぞれ1つのクラス)、PKCS5Paddingのための1つのクラス、およびCipherSpi
からサブクラス化された汎用AESクラスを実装できます。 このプロバイダは、マスター・クラス内に次のCipher
プロパティを保持します。
-
Cipher.
AES
「algorithm」形式の変換の場合、Cipher
エンジン・クラスのgetInstance
ファクトリ・メソッドは、次の規則に従ってプロバイダのCipherSpi
の実装をインスタンス化します。
-
プロバイダが、指定された「algorithm」に対応する
CipherSpi
のサブクラスを登録済みかどうかをチェックする。登録済みの場合、このクラスをインスタンス化して、このモードおよびパディング方式のデフォルト値(プロバイダにより提供)を使用可能にします。
未登録の場合、例外
NoSuchAlgorithmException
をスローします。
「algorithm/mode/padding」形式の変換の場合、Cipher
エンジン・クラスのgetInstance
ファクトリ・メソッドは、次の規則に従ってプロバイダのCipherSpi
の実装をインスタンス化します。
-
プロバイダが、指定された「algorithm/mode/padding」変換に対応する
CipherSpi
のサブクラスを登録済みかどうかをチェックする。登録済みの場合、このクラスをインスタンス化します。
未登録の場合、次のステップに進みます。
-
プロバイダが、サブ変換「algorithm/mode」に対応する
CipherSpi
のサブクラスを登録済みかどうかをチェックする。回答がYESの場合はインスタンス化し、新しいインスタンスで
engineSetPadding(<i>padding</i>)
をコールします。未登録の場合、次のステップに進みます。
-
プロバイダが、サブ変換「algorithm//padding」(ダブル・スラッシュに注意)に対応する
CipherSpi
のサブクラスを登録済みかどうかをチェックする。回答がYESの場合はインスタンス化し、新しいインスタンスで
engineSetMode(<i>mode</i>)
をコールします。未登録の場合、次のステップに進みます。
-
プロバイダが、サブ変換「algorithm」に対応する
CipherSpi
のサブクラスを登録済みかどうかをチェックする。回答がYESの場合はインスタンス化し、新しいインスタンスで
engineSetMode(<i>mode</i>)
およびengineSetPadding(<i>padding</i>)
をコールします。未登録の場合、例外
NoSuchAlgorithmException
をスローします。
- 導入されたバージョン:
- 1.4
- 関連項目:
-
コンストラクタのサマリー
コンストラクタ -
メソッドのサマリー
修飾子と型メソッド説明protected abstract byte[]
engineDoFinal
(byte[] input, int inputOffset, int inputLen) 単一の部分から成る操作でデータを暗号化または復号化するか、複数の部分から成る操作を終了します。protected abstract int
engineDoFinal
(byte[] input, int inputOffset, int inputLen, byte[] output, int outputOffset) 単一の部分から成る操作でデータを暗号化または復号化するか、複数の部分から成る操作を終了します。protected int
engineDoFinal
(ByteBuffer input, ByteBuffer output) 単一の部分から成る操作でデータを暗号化または復号化するか、複数の部分から成る操作を終了します。protected abstract int
ブロック・サイズを返します(バイト単位)。protected abstract byte[]
新しいバッファの初期化ベクトル(IV)を返します。protected int
engineGetKeySize
(Key key) 指定されたキー・オブジェクトのキー・サイズをビット単位で返します。protected abstract int
engineGetOutputSize
(int inputLen) 入力の長さinputLen
(バイト単位)を指定して、次のupdate
またはdoFinal
操作の結果を保持するために必要な出力バッファの長さをバイト数で返します。protected abstract AlgorithmParameters
この暗号で使用されるパラメータを返します。protected abstract void
engineInit
(int opmode, Key key, AlgorithmParameters params, SecureRandom random) このCipherSpi
オブジェクトをキー、アルゴリズム・パラメータのセットおよびランダム性のソースで初期化します。protected abstract void
engineInit
(int opmode, Key key, SecureRandom random) このCipherSpi
オブジェクトをキーとランダム性のソースで初期化します。protected abstract void
engineInit
(int opmode, Key key, AlgorithmParameterSpec params, SecureRandom random) このCipherSpi
オブジェクトをキー、アルゴリズム・パラメータのセットおよびランダム性のソースで初期化します。protected abstract void
engineSetMode
(String mode) この暗号のモードを設定します。protected abstract void
engineSetPadding
(String padding) この暗号のパディング・メカニズムを設定します。protected Key
engineUnwrap
(byte[] wrappedKey, String wrappedKeyAlgorithm, int wrappedKeyType) 前にラップされたキーをラップ解除します。protected abstract byte[]
engineUpdate
(byte[] input, int inputOffset, int inputLen) 複数部分の暗号化または復号化操作(このCipherSpi
オブジェクトの初期化方法に応じて)を続行し、別のデータ部分を処理します。protected abstract int
engineUpdate
(byte[] input, int inputOffset, int inputLen, byte[] output, int outputOffset) 複数部分の暗号化または復号化操作(このCipherSpi
オブジェクトの初期化方法に応じて)を続行し、別のデータ部分を処理します。protected int
engineUpdate
(ByteBuffer input, ByteBuffer output) 複数部分の暗号化または復号化操作(このCipherSpi
オブジェクトの初期化方法に応じて)を続行し、別のデータ部分を処理します。protected void
engineUpdateAAD
(byte[] src, int offset, int len) 指定されたバッファのサブセットを使用して、追加認証データ(AAD)のマルチパート更新を続行します。protected void
追加認証データ(AAD)のマルチパート更新を続行します。protected byte[]
engineWrap
(Key key) キーをラップします。
-
コンストラクタの詳細
-
CipherSpi
public CipherSpi()サブクラスが呼び出すためのコンストラクタ。
-
-
メソッドの詳細
-
engineSetMode
protected abstract void engineSetMode(String mode) throws NoSuchAlgorithmException この暗号のモードを設定します。- パラメータ:
mode
- 暗号化モード- 例外:
NoSuchAlgorithmException
- 要求された暗号化モードが存在しない場合
-
engineSetPadding
protected abstract void engineSetPadding(String padding) throws NoSuchPaddingException この暗号のパディング・メカニズムを設定します。- パラメータ:
padding
- パディング・メカニズム- 例外:
NoSuchPaddingException
- 要求されたパディング・メカニズムが存在しない場合
-
engineGetBlockSize
protected abstract int engineGetBlockSize()ブロック・サイズを返します(バイト単位)。- 戻り値:
- ブロック・サイズ(バイト単位)、またはアルゴリズムがブロック暗号でない場合は0
-
engineGetOutputSize
protected abstract int engineGetOutputSize(int inputLen) 入力の長さinputLen
(バイト単位)を指定して、次のupdate
またはdoFinal
操作の結果を保持するために必要な出力バッファの長さをバイト数で返します。この呼出しでは、以前の
update
呼出しの処理されていない(バッファにある)データを考慮し、パディングおよびAEADタグ付けを行います。次の
update
またはdoFinal
呼出しの実際の出力長は、このメソッドが返す長さより小さいことがあります。- パラメータ:
inputLen
- 入力長(バイト単位)- 戻り値:
- 必要な出力バッファ・サイズ(バイト単位)
-
engineGetIV
protected abstract byte[] engineGetIV()新しいバッファの初期化ベクトル(IV)を返します。これは、IVがユーザー指定のパス・フレーズから派生するパスワードベースの暗号化または復号化のコンテキストにおいて役立ちます。
- 戻り値:
- 新しいバッファ内の初期化ベクトル、またはアルゴリズムがIVを使用しない場合、またはIVがまだ設定されていない場合の
null
-
engineGetParameters
protected abstract AlgorithmParameters engineGetParameters()この暗号で使用されるパラメータを返します。返されるパラメータは、この暗号の初期化に使用されたものと同じか、基礎となる暗号実装で使用される追加のデフォルトまたはランダム・パラメータ値が含まれる場合があります。 必要なパラメータが指定されておらず、暗号によって生成できる場合は、生成されたパラメータが返されます。 それ以外の場合は
null
が返されます。- 戻り値:
- この暗号で使用されるパラメータ、または
null
-
engineInit
protected abstract void engineInit(int opmode, Key key, SecureRandom random) throws InvalidKeyException このCipherSpi
オブジェクトをキーとランダム性のソースで初期化します。CipherSpi
オブジェクトは、次の4つの操作のいずれかに対して初期化されます:opmode
の値に応じて、暗号化、復号化、キー・ラップまたはキーのアン・ラップを行います。この暗号が、指定された
key
から派生できないアルゴリズム・パラメータを必要とする場合、基本となる暗号実装は、暗号化またはキー・ラッピング用に初期化されていれば、プロバイダ固有のデフォルトまたはランダム値を使用して必要なパラメータ自体を生成し、復号化またはキー・ラッピング解除用に初期化されていれば、InvalidKeyException
を発生させます。 生成されたパラメータは、engineGetParameters
またはengineGetIV
(パラメータがIVの場合)を使用して取り出すことができます。この暗号が入力パラメータから派生できないアルゴリズム・パラメータを必要とし、適切なプロバイダ固有のデフォルト値がない場合は、必ず初期化に失敗します。
この暗号(フィードバックまたはパディング・スキームを含む)にランダム・バイト(例、パラメータ生成用)が必要な場合は、
random
から取得します。CipherSpi
オブジェクトが初期化されると、以前に取得されたすべての状態が失われることに注意してください。 つまり、CipherSpi
オブジェクトの初期化は、そのCipherSpi
オブジェクトの新しいインスタンスを作成して初期化することと同じです。- パラメータ:
opmode
- このCipherSpi
オブジェクト(これは次のいずれかです:ENCRYPT_MODE
,DECRYPT_MODE
,WRAP_MODE
またはUNWRAP_MODE
)の操作モードkey
- 暗号化キーrandom
- 乱数発生の元- 例外:
InvalidKeyException
- 指定されたキーがこの暗号の初期化に不適切な場合、または指定されたキーから判定することができないアルゴリズム・パラメータを必要とする場合UnsupportedOperationException
-opmode
がWRAP_MODE
の場合、またはUNWRAP_MODE
が暗号によって実装されていない場合
-
engineInit
protected abstract void engineInit(int opmode, Key key, AlgorithmParameterSpec params, SecureRandom random) throws InvalidKeyException, InvalidAlgorithmParameterException このCipherSpi
オブジェクトをキー、アルゴリズム・パラメータのセットおよびランダム性のソースで初期化します。CipherSpi
オブジェクトは、次の4つの操作のいずれかに対して初期化されます:opmode
の値に応じて、暗号化、復号化、キー・ラップまたはキーのアン・ラップを行います。この暗号にアルゴリズム・パラメータが必要で、
params
がnull
の場合、基礎となる暗号実装では、暗号化またはキー・ラッピングのために初期化されている場合に必要なパラメータ自体(プロバイダ固有のデフォルト値またはランダム値の使用)を生成し、復号化またはキー・アン・ラップのために初期化されている場合はInvalidAlgorithmParameterException
を生成します。 生成されたパラメータは、engineGetParameters
またはengineGetIV
(パラメータがIVの場合)を使用して取り出すことができます。この暗号が入力パラメータから派生できないアルゴリズム・パラメータを必要とし、適切なプロバイダ固有のデフォルト値がない場合は、必ず初期化に失敗します。
この暗号(フィードバックまたはパディング・スキームを含む)にランダム・バイト(例、パラメータ生成用)が必要な場合は、
random
から取得します。CipherSpi
オブジェクトが初期化されると、以前に取得されたすべての状態が失われることに注意してください。 つまり、CipherSpi
オブジェクトの初期化は、そのCipherSpi
オブジェクトの新しいインスタンスを作成して初期化することと同じです。- パラメータ:
opmode
- このCipherSpi
オブジェクト(これは次のいずれかです:ENCRYPT_MODE
,DECRYPT_MODE
,WRAP_MODE
またはUNWRAP_MODE
)の操作モードkey
- 暗号化キーparams
- アルゴリズム・パラメータrandom
- 乱数発生の元- 例外:
InvalidKeyException
- 指定されたキーがこの暗号の初期化に不適切な場合InvalidAlgorithmParameterException
- 指定されたアルゴリズム・パラメータがこの暗号に適していない場合、またはこの暗号にアルゴリズム・パラメータが必要で、params
がnull
の場合UnsupportedOperationException
-opmode
がWRAP_MODE
の場合、またはUNWRAP_MODE
が暗号によって実装されていない場合
-
engineInit
protected abstract void engineInit(int opmode, Key key, AlgorithmParameters params, SecureRandom random) throws InvalidKeyException, InvalidAlgorithmParameterException このCipherSpi
オブジェクトをキー、アルゴリズム・パラメータのセットおよびランダム性のソースで初期化します。CipherSpi
オブジェクトは、次の4つの操作のいずれかに対して初期化されます:opmode
の値に応じて、暗号化、復号化、キー・ラップまたはキーのアン・ラップを行います。この暗号にアルゴリズム・パラメータが必要で、
params
がnull
の場合、基礎となる暗号実装では、暗号化またはキー・ラッピングのために初期化されている場合に必要なパラメータ自体(プロバイダ固有のデフォルト値またはランダム値の使用)を生成し、復号化またはキー・アン・ラップのために初期化されている場合はInvalidAlgorithmParameterException
を生成します。 生成されたパラメータは、engineGetParameters
またはengineGetIV
(パラメータがIVの場合)を使用して取り出すことができます。この暗号が入力パラメータから派生できないアルゴリズム・パラメータを必要とし、適切なプロバイダ固有のデフォルト値がない場合は、必ず初期化に失敗します。
この暗号(フィードバックまたはパディング・スキームを含む)にランダム・バイト(例、パラメータ生成用)が必要な場合は、
random
から取得します。CipherSpi
オブジェクトが初期化されると、以前に取得されたすべての状態が失われることに注意してください。 つまり、CipherSpi
オブジェクトの初期化は、そのCipherSpi
オブジェクトの新しいインスタンスを作成して初期化することと同じです。- パラメータ:
opmode
- このCipherSpi
オブジェクト(これは次のいずれかです:ENCRYPT_MODE
,DECRYPT_MODE
,WRAP_MODE
またはUNWRAP_MODE
)の操作モードkey
- 暗号化キーparams
- アルゴリズム・パラメータrandom
- 乱数発生の元- 例外:
InvalidKeyException
- 指定されたキーがこの暗号の初期化に不適切な場合InvalidAlgorithmParameterException
- 指定されたアルゴリズム・パラメータがこの暗号に不適切な場合、またはこの暗号がアルゴリズム・パラメータを必要とし、params
がnullの場合UnsupportedOperationException
-opmode
がWRAP_MODE
の場合、またはUNWRAP_MODE
が暗号によって実装されていない場合
-
engineUpdate
protected abstract byte[] engineUpdate(byte[] input, int inputOffset, int inputLen) 複数部分の暗号化または復号化操作(このCipherSpi
オブジェクトの初期化方法に応じて)を続行し、別のデータ部分を処理します。inputOffset
から始まる、input
バッファ内の最初のinputLen
バイトが処理され、結果が新しいバッファに格納されます。- パラメータ:
input
- 入力バッファinputOffset
- 入力を開始するinput
内のオフセットinputLen
- 入力長- 戻り値:
- 結果を含む新しいバッファ、または暗号がブロック暗号であり、入力データが短すぎて新しいブロックが生成されない場合は
null
-
engineUpdate
protected abstract int engineUpdate(byte[] input, int inputOffset, int inputLen, byte[] output, int outputOffset) throws ShortBufferException 複数部分の暗号化または復号化操作(このCipherSpi
オブジェクトの初期化方法に応じて)を続行し、別のデータ部分を処理します。inputOffset
から始まる、input
バッファ内の最初のinputLen
バイトが処理され、結果はoutput
バッファのoutputOffset
から始まる位置に格納されます。output
バッファが小さすぎて結果を保持できない場合は、ShortBufferException
がスローされます。- パラメータ:
input
- 入力バッファinputOffset
- 入力を開始するinput
内のオフセットinputLen
- 入力長output
- 結果を格納するバッファoutputOffset
- 結果が格納されるoutput
内のオフセット- 戻り値:
output
に格納されたバイト数- 例外:
ShortBufferException
- 指定された出力バッファが小さすぎて結果を保持できない場合
-
engineUpdate
protected int engineUpdate(ByteBuffer input, ByteBuffer output) throws ShortBufferException 複数部分の暗号化または復号化操作(このCipherSpi
オブジェクトの初期化方法に応じて)を続行し、別のデータ部分を処理します。input.position()
から始まるすべてのinput.remaining()
バイトが処理されます。 結果はoutputバッファに格納されます。 終了時に、入力バッファの位置はリミットに等しくなりますが、リミットは変更されません。 出力バッファの位置はnだけ増加します。nは、このメソッドが返す値です。出力バッファのリミットは変更されません。output.remaining()
バイトが結果を保持するのに不十分な場合は、ShortBufferException
がスローされます。ByteBufferをバイト配列よりも効率的に処理できる場合、このメソッドをサブクラスでオーバーライドすることを検討してください。
- パラメータ:
input
- 入力ByteBufferoutput
- 出力ByteBuffer- 戻り値:
output
に格納されたバイト数- 例外:
ShortBufferException
- 出力バッファ内に残っている容量が不足している場合NullPointerException
- いずれかのパラメータがnull
の場合- 導入されたバージョン:
- 1.5
-
engineDoFinal
protected abstract byte[] engineDoFinal(byte[] input, int inputOffset, int inputLen) throws IllegalBlockSizeException, BadPaddingException 単一の部分から成る操作でデータを暗号化または復号化するか、複数の部分から成る操作を終了します。 データは、このCipherSpi
オブジェクトの初期化方法に応じて暗号化または復号化されます。inputOffset
から始まるinput
バッファ内の最初のinputLen
バイト、および前のupdate
操作でバッファに入れられた可能性のあるすべての入力バイトが処理され、パディング(要求された場合)が適用されます。 AEADモード(GCMやCCMなど)が使用されている場合、認証タグは暗号化の場合に追加されるか、復号化の場合に検証されます。 結果は新しいバッファに格納されます。このメソッドが終了すると、この
CipherSpi
オブジェクトは、engineInit
へのコールによって以前に初期化されたときの状態にリセットされます。 つまり、オブジェクトはリセットされて、さらにデータを暗号化または復号化するために使用できます(engineInit
の呼出しで指定された操作モードにより異なります)。ノート: 例外がスローされた場合、この
CipherSpi
オブジェクトは、再使用する前にリセットする必要がある場合があります。- パラメータ:
input
- 入力バッファinputOffset
- 入力を開始するinput
内のオフセットinputLen
- 入力長- 戻り値:
- 結果の入った新しいバッファ
- 例外:
IllegalBlockSizeException
- この暗号がブロック暗号であり、パディングが要求されておらず(暗号化モードの場合のみ)、この暗号で処理されたデータの入力長の合計がブロック・サイズの倍数でない場合。または、この暗号化アルゴリズムが、指定された入力データを処理できない場合BadPaddingException
- このCipherSpi
オブジェクトが復号化モードで、(un)パディングがリクエストされたが、復号化されたデータが適切なパディング・バイトによってバインドされていない場合AEADBadTagException
- このCipherSpi
オブジェクトがAEADモード(GCMやCCMなど)で復号化されており、受信した認証タグが計算された値と一致しない場合
-
engineDoFinal
protected abstract int engineDoFinal(byte[] input, int inputOffset, int inputLen, byte[] output, int outputOffset) throws ShortBufferException, IllegalBlockSizeException, BadPaddingException 単一の部分から成る操作でデータを暗号化または復号化するか、複数の部分から成る操作を終了します。 データは、このCipherSpi
オブジェクトの初期化方法に応じて暗号化または復号化されます。inputOffset
から始まるinput
バッファ内の最初のinputLen
バイト、および前のupdate
操作でバッファに入れられた可能性のあるすべての入力バイトが処理され、パディング(要求された場合)が適用されます。 GCMやCCMなどのAEADモードが使用されている場合、認証タグは暗号化の場合に追加されるか、復号化の場合に検証されます。 結果は、outputOffset
から始まるoutput
バッファに格納されます。output
バッファが小さすぎて結果を保持できない場合は、ShortBufferException
がスローされます。このメソッドが終了すると、この
CipherSpi
オブジェクトは、engineInit
へのコールによって以前に初期化されたときの状態にリセットされます。 つまり、オブジェクトはリセットされて、さらにデータを暗号化または復号化するために使用できます(engineInit
の呼出しで指定された操作モードにより異なります)。ノート: 例外がスローされた場合、この
CipherSpi
オブジェクトは、再使用する前にリセットする必要がある場合があります。- パラメータ:
input
- 入力バッファinputOffset
- 入力を開始するinput
内のオフセットinputLen
- 入力長output
- 結果を格納するバッファoutputOffset
- 結果が格納されるoutput
内のオフセット- 戻り値:
output
に格納されたバイト数- 例外:
IllegalBlockSizeException
- この暗号がブロック暗号であり、パディングが要求されておらず(暗号化モードの場合のみ)、この暗号で処理されたデータの入力長の合計がブロック・サイズの倍数でない場合。または、この暗号化アルゴリズムが、指定された入力データを処理できない場合ShortBufferException
- 指定された出力バッファが小さすぎて結果を保持できない場合BadPaddingException
- このCipherSpi
オブジェクトが復号化モードで、(un)パディングがリクエストされたが、復号化されたデータが適切なパディング・バイトによってバインドされていない場合AEADBadTagException
- このCipherSpi
オブジェクトがAEADモード(GCMやCCMなど)で復号化されており、受信した認証タグが計算された値と一致しない場合
-
engineDoFinal
protected int engineDoFinal(ByteBuffer input, ByteBuffer output) throws ShortBufferException, IllegalBlockSizeException, BadPaddingException 単一の部分から成る操作でデータを暗号化または復号化するか、複数の部分から成る操作を終了します。 データは、このCipherSpi
オブジェクトの初期化方法に応じて暗号化または復号化されます。input.position()
から始まるすべてのinput.remaining()
バイトが処理されます。 GCMやCCMなどのAEADモードが使用されている場合、認証タグは暗号化の場合に追加されるか、復号化の場合に検証されます。 結果はoutputバッファに格納されます。 終了時に、入力バッファの位置はリミットに等しくなりますが、リミットは変更されません。 出力バッファの位置はnだけ増加します。nは、このメソッドが返す値です。出力バッファのリミットは変更されません。output.remaining()
バイトが結果を保持するのに不十分な場合は、ShortBufferException
がスローされます。このメソッドが終了すると、この
CipherSpi
オブジェクトは、engineInit
へのコールによって以前に初期化されたときの状態にリセットされます。 つまり、オブジェクトはリセットされ、暗号化または復号化に使用できます(さらにengineInit
データのコールで指定された演算モードによって異なります)。ノート: 例外がスローされた場合、この
CipherSpi
オブジェクトは、再使用する前にリセットする必要がある場合があります。ByteBufferをバイト配列よりも効率的に処理できる場合、このメソッドをサブクラスでオーバーライドすることを検討してください。
- パラメータ:
input
- 入力ByteBufferoutput
- 出力ByteBuffer- 戻り値:
output
に格納されたバイト数- 例外:
IllegalBlockSizeException
- この暗号がブロック暗号であり、パディングが要求されておらず(暗号化モードの場合のみ)、この暗号で処理されたデータの入力長の合計がブロック・サイズの倍数でない場合。または、この暗号化アルゴリズムが、指定された入力データを処理できない場合ShortBufferException
- 出力バッファ内に残っている容量が不足している場合BadPaddingException
- このCipherSpi
オブジェクトが復号化モードで、(un)パディングがリクエストされたが、復号化されたデータが適切なパディング・バイトによってバインドされていない場合AEADBadTagException
- このCipherSpi
オブジェクトがAEADモード(GCMやCCMなど)で復号化されており、受信した認証タグが計算された値と一致しない場合NullPointerException
- いずれかのパラメータがnull
の場合- 導入されたバージョン:
- 1.5
-
engineWrap
protected byte[] engineWrap(Key key) throws IllegalBlockSizeException, InvalidKeyException キーをラップします。この具象メソッドは、事前に定義されたこの抽象クラスに追加されたものです。 下位互換性のために、抽象メソッドにはできません。 キーをラップするために、プロバイダによってオーバーライドされる場合があります。 このようなオーバーライドは、指定されたキーをラップできない場合、
IllegalBlockSizeException
またはInvalidKeyException
(指定した状況下)をスローすると想定されます。 このメソッドがオーバーライドされない場合、常にUnsupportedOperationException
がスローされます。- パラメータ:
key
- ラップされるキー- 戻り値:
- ラップされたキー
- 例外:
IllegalBlockSizeException
- この暗号がブロック暗号であり、パディングが要求されておらず、ラップされるキーのエンコーディングの長さがブロック・サイズの倍数でない場合InvalidKeyException
- この暗号(例、ハードウェアで保護されたキーがソフトウェアのみの暗号に渡されています)を使用してキーをラップすることが不可能または安全でない場合UnsupportedOperationException
- このメソッドがサポートされていない場合
-
engineUnwrap
protected Key engineUnwrap(byte[] wrappedKey, String wrappedKeyAlgorithm, int wrappedKeyType) throws InvalidKeyException, NoSuchAlgorithmException 前にラップされたキーをラップ解除します。この具象メソッドは、事前に定義されたこの抽象クラスに追加されたものです。 下位互換性のために、抽象メソッドにはできません。 前にラップされたキーをラップ解除するために、プロバイダによってオーバーライドされる場合があります。 このようなオーバーライドは、指定されたラップされたキーをアン・ラップできない場合、
InvalidKeyException
をスローすると想定されます。 このメソッドがオーバーライドされない場合、常にUnsupportedOperationException
がスローされます。- パラメータ:
wrappedKey
- ラップを解除されるキーwrappedKeyAlgorithm
- ラップされたキーに関連したアルゴリズムwrappedKeyType
- ラップされたキーのタイプ。 これはSECRET_KEY
、PRIVATE_KEY
、またはPUBLIC_KEY
のいずれかです。- 戻り値:
- ラップ解除されたキー
- 例外:
NoSuchAlgorithmException
- インストールされているどのプロバイダもwrappedKeyAlgorithm
のwrappedKeyType
タイプのキーを作成できない場合InvalidKeyException
-wrappedKey
がwrappedKeyAlgorithm
のwrappedKeyType
タイプのラップされたキーを表さない場合UnsupportedOperationException
- このメソッドがサポートされていない場合
-
engineGetKeySize
protected int engineGetKeySize(Key key) throws InvalidKeyException 指定されたキー・オブジェクトのキー・サイズをビット単位で返します。この具象メソッドは、事前に定義されたこの抽象クラスに追加されたものです。 プロバイダによってオーバーライドされない場合は、
UnsupportedOperationException
をスローします。- パラメータ:
key
- キー・オブジェクト- 戻り値:
- 指定されたキー・オブジェクトのキー・サイズ
- 例外:
InvalidKeyException
-key
が無効である場合
-
engineUpdateAAD
protected void engineUpdateAAD(byte[] src, int offset, int len) 指定されたバッファのサブセットを使用して、追加認証データ(AAD)のマルチパート更新を続行します。このメソッドを呼び出すと、AEAD (GCMまたはCCM)などのモードで動作するときにAADが暗号に提供されます。 この暗号がGCMまたはCCMモードで操作されている場合は、(
update
およびdoFinal
メソッドを介した)暗号テキスト上の操作を開始する前に、すべてのAADが提供される必要があります。- パラメータ:
src
- AADを格納するバッファoffset
- AAD入力を開始するsrc
内のオフセットlen
- AADバイトの数- 例外:
IllegalStateException
- このCipherSpi
オブジェクトが間違った状態である(例:初期化されていません)の場合、AADを受け入れないか、GCMまたはCCMモードで動作していて、アクティブな暗号化/復号化操作に対してupdate
メソッドの1つがすでにコールされている場合UnsupportedOperationException
- このメソッドが実装によってオーバーライドされていない場合- 導入されたバージョン:
- 1.7
-
engineUpdateAAD
protected void engineUpdateAAD(ByteBuffer src) 追加認証データ(AAD)のマルチパート更新を続行します。このメソッドを呼び出すと、AEAD (GCMまたはCCM)などのモードで動作するときにAADが暗号に提供されます。 この暗号がGCMまたはCCMモードで操作されている場合は、(
update
およびdoFinal
メソッドを介した)暗号テキスト上の操作を開始する前に、すべてのAADが提供される必要があります。src.position()
から始まるすべてのsrc.remaining()
バイトが処理されます。 終了時に、入力バッファの位置はリミットに等しくなりますが、リミットは変更されません。- パラメータ:
src
- AADを格納するバッファ- 例外:
IllegalStateException
- このCipherSpi
オブジェクトが間違った状態である(例:初期化されていません)の場合、AADを受け入れないか、GCMまたはCCMモードで動作していて、アクティブな暗号化/復号化操作に対してupdate
メソッドの1つがすでにコールされている場合UnsupportedOperationException
- このメソッドが実装によってオーバーライドされていない場合- 導入されたバージョン:
- 1.7
-