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 paddingCipher.algName -
// provider's subclass of "CipherSpi" implements "algName" in the // specified "mode", with pluggable paddingCipher.algName/mode -
// provider's subclass of "CipherSpi" implements "algName" with the // specified "padding", with pluggable modeCipher.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 intengineDoFinal(byte[] input, int inputOffset, int inputLen, byte[] output, int outputOffset) 単一の部分から成る操作でデータを暗号化または復号化するか、複数の部分から成る操作を終了します。protected intengineDoFinal(ByteBuffer input, ByteBuffer output) 単一の部分から成る操作でデータを暗号化または復号化するか、複数の部分から成る操作を終了します。protected abstract intブロック・サイズを返します(バイト単位)。protected abstract byte[]新しいバッファの初期化ベクトル(IV)を返します。protected intengineGetKeySize(Key key) 指定されたキー・オブジェクトのキー・サイズをビット単位で返します。protected abstract intengineGetOutputSize(int inputLen) 入力の長さinputLen(バイト単位)を指定して、次のupdateまたはdoFinal操作の結果を保持するために必要な出力バッファの長さをバイト数で返します。protected abstract AlgorithmParametersこの暗号で使用されるパラメータを返します。protected abstract voidengineInit(int opmode, Key key, AlgorithmParameters params, SecureRandom random) このCipherSpiオブジェクトをキー、アルゴリズム・パラメータのセットおよびランダム性のソースで初期化します。protected abstract voidengineInit(int opmode, Key key, SecureRandom random) このCipherSpiオブジェクトをキーとランダム性のソースで初期化します。protected abstract voidengineInit(int opmode, Key key, AlgorithmParameterSpec params, SecureRandom random) このCipherSpiオブジェクトをキー、アルゴリズム・パラメータのセットおよびランダム性のソースで初期化します。protected abstract voidengineSetMode(String mode) この暗号のモードを設定します。protected abstract voidengineSetPadding(String padding) この暗号のパディング・メカニズムを設定します。protected KeyengineUnwrap(byte[] wrappedKey, String wrappedKeyAlgorithm, int wrappedKeyType) 前にラップされたキーをラップ解除します。protected abstract byte[]engineUpdate(byte[] input, int inputOffset, int inputLen) 複数部分の暗号化または復号化操作(このCipherSpiオブジェクトの初期化方法に応じて)を続行し、別のデータ部分を処理します。protected abstract intengineUpdate(byte[] input, int inputOffset, int inputLen, byte[] output, int outputOffset) 複数部分の暗号化または復号化操作(このCipherSpiオブジェクトの初期化方法に応じて)を続行し、別のデータ部分を処理します。protected intengineUpdate(ByteBuffer input, ByteBuffer output) 複数部分の暗号化または復号化操作(このCipherSpiオブジェクトの初期化方法に応じて)を続行し、別のデータ部分を処理します。protected voidengineUpdateAAD(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
-