public abstract class CipherSpi extends Object
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
のサブクラスを登録済みかどうかをチェックする。登録済みの場合、インスタンス化してから、新規インスタンスに対し
engineSetPadding(padding)
を呼び出します。未登録の場合、次のステップに進みます。
-
プロバイダが、サブ変換「algorithm//padding」(ダブル・スラッシュに注意)に対応する
CipherSpi
のサブクラスを登録済みかどうかをチェックする。登録済みの場合、インスタンス化してから、新規インスタンスに対し
engineSetMode(mode)
を呼び出します。未登録の場合、次のステップに進みます。
-
プロバイダが、サブ変換「algorithm」に対応する
CipherSpi
のサブクラスを登録済みかどうかをチェックする。回答が「はい」の場合、これをインスタンス化してから、新規インスタンスに対し
engineSetMode(mode)
およびengineSetPadding(padding)
を呼び出します。未登録の場合、例外
NoSuchAlgorithmException
をスローします。
- 導入されたバージョン:
- 1.4
- 関連項目:
KeyGenerator
,SecretKey
-
コンストラクタのサマリー
コンストラクタ コンストラクタ 説明 CipherSpi()
-
メソッドのサマリー
修飾子と型 メソッド 説明 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
engineGetBlockSize()
ブロック・サイズを返します(バイト単位)。protected abstract byte[]
engineGetIV()
新しいバッファの初期化ベクトル(IV)を返します。protected int
engineGetKeySize(Key key)
指定されたキー・オブジェクトのキー・サイズをビット単位で返します。protected abstract int
engineGetOutputSize(int inputLen)
入力の長さinputLen
(バイト単位)を指定して、次のupdate
またはdoFinal
操作の結果を保持するために必要な出力バッファの長さをバイト数で返します。protected abstract AlgorithmParameters
engineGetParameters()
この暗号で使用されるパラメータを返します。protected abstract void
engineInit(int opmode, Key key, AlgorithmParameters params, SecureRandom random)
キー、アルゴリズム・パラメータのセット、および乱数発生の元を使用してこの暗号を初期化します。protected abstract void
engineInit(int opmode, Key key, SecureRandom random)
キーと乱数発生の元を使用してこの暗号を初期化します。protected abstract void
engineInit(int opmode, Key key, AlgorithmParameterSpec params, SecureRandom random)
キー、アルゴリズム・パラメータのセット、および乱数発生の元を使用してこの暗号を初期化します。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)
複数の部分から成る暗号化または復号化操作(この暗号の初期化方法により異なります)を継続し、別のデータ部分を処理します。protected abstract int
engineUpdate(byte[] input, int inputOffset, int inputLen, byte[] output, int outputOffset)
複数の部分から成る暗号化または復号化操作(この暗号の初期化方法により異なります)を継続し、別のデータ部分を処理します。protected int
engineUpdate(ByteBuffer input, ByteBuffer output)
複数の部分から成る暗号化または復号化操作(この暗号の初期化方法により異なります)を継続し、別のデータ部分を処理します。protected void
engineUpdateAAD(byte[] src, int offset, int len)
提供されたバッファのサブセットを使用して、Additional Authentication Data (AAD)のマルチパート更新を続行します。protected void
engineUpdateAAD(ByteBuffer src)
AAD (Additional Authentication Data)のマルチパート更新を継続します。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
-
engineInit
protected abstract void engineInit(int opmode, Key key, SecureRandom random) throws InvalidKeyExceptionキーと乱数発生の元を使用してこの暗号を初期化します。この暗号は、
opmode
の値に従って、暗号化、復号化、キー・ラッピング、またはキー・ラッピング解除の4つの操作の1つに合わせて初期化されます。この暗号が、指定された
key
から派生できないアルゴリズム・パラメータを必要とする場合、基本となる暗号実装は、暗号化またはキー・ラッピング用に初期化されていれば、プロバイダ固有のデフォルトまたはランダム値を使用して必要なパラメータ自体を生成し、復号化またはキー・ラッピング解除用に初期化されていれば、InvalidKeyException
を発生させます。 生成されたパラメータは、engineGetParameters
またはengineGetIV
(パラメータがIVの場合)を使用して取り出すことができます。この暗号が入力パラメータから派生できないアルゴリズム・パラメータを必要とし、適切なプロバイダ固有のデフォルト値がない場合は、必ず初期化に失敗します。
この暗号(基本となるフィード・バックまたはパディング方式を含む)が乱数バイトを必要とする場合(パラメータ生成のためなど)は、
random
から取得します。Cipherオブジェクトを初期化すると、それまでに獲得した状態がすべて失われることに留意してください。 つまり、Cipherを初期化することは、そのCipherの新規インスタンスを作成して初期化することと等価です。
- パラメータ:
opmode
- この暗号の操作モード(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キー、アルゴリズム・パラメータのセット、および乱数発生の元を使用してこの暗号を初期化します。この暗号は、
opmode
の値に従って、暗号化、復号化、キー・ラッピング、またはキー・ラッピング解除の4つの操作の1つに合わせて初期化されます。この暗号がアルゴリズム・パラメータを必要とし、
params
がnullの場合、基本となる暗号実装は、暗号化またはキー・ラッピング用に初期化されていれば、プロバイダ固有のデフォルトまたはランダム値を使用して必要なパラメータ自体を生成し、復号化またはキー・ラッピング解除用に初期化されていれば、InvalidAlgorithmParameterException
を発生させます。 生成されたパラメータは、engineGetParameters
またはengineGetIV
(パラメータがIVの場合)を使用して取り出すことができます。この暗号が入力パラメータから派生できないアルゴリズム・パラメータを必要とし、適切なプロバイダ固有のデフォルト値がない場合は、必ず初期化に失敗します。
この暗号(基本となるフィード・バックまたはパディング方式を含む)が乱数バイトを必要とする場合(パラメータ生成のためなど)は、
random
から取得します。Cipherオブジェクトを初期化すると、それまでに獲得した状態がすべて失われることに留意してください。 つまり、Cipherを初期化することは、そのCipherの新規インスタンスを作成して初期化することと等価です。
- パラメータ:
opmode
- この暗号の操作モード(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キー、アルゴリズム・パラメータのセット、および乱数発生の元を使用してこの暗号を初期化します。この暗号は、
opmode
の値に従って、暗号化、復号化、キー・ラッピング、またはキー・ラッピング解除の4つの操作の1つに合わせて初期化されます。この暗号がアルゴリズム・パラメータを必要とし、
params
がnullの場合、基本となる暗号実装は、暗号化またはキー・ラッピング用に初期化されていれば、プロバイダ固有のデフォルトまたはランダム値を使用して必要なパラメータ自体を生成し、復号化またはキー・ラッピング解除用に初期化されていれば、InvalidAlgorithmParameterException
を発生させます。 生成されたパラメータは、engineGetParameters
またはengineGetIV
(パラメータがIVの場合)を使用して取り出すことができます。この暗号が入力パラメータから派生できないアルゴリズム・パラメータを必要とし、適切なプロバイダ固有のデフォルト値がない場合は、必ず初期化に失敗します。
この暗号(基本となるフィード・バックまたはパディング方式を含む)が乱数バイトを必要とする場合(パラメータ生成のためなど)は、
random
から取得します。Cipherオブジェクトを初期化すると、それまでに獲得した状態がすべて失われることに留意してください。 つまり、Cipherを初期化することは、そのCipherの新規インスタンスを作成して初期化することと等価です。
- パラメータ:
opmode
- この暗号の操作モード(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)複数の部分から成る暗号化または復号化操作(この暗号の初期化方法により異なります)を継続し、別のデータ部分を処理します。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複数の部分から成る暗号化または復号化操作(この暗号の初期化方法により異なります)を継続し、別のデータ部分を処理します。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複数の部分から成る暗号化または復号化操作(この暗号の初期化方法により異なります)を継続し、別のデータ部分を処理します。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単一の部分から成る操作でデータを暗号化または復号化するか、複数の部分から成る操作を終了します。 データは、この暗号が初期化された方法に従って、暗号化または復号化されます。inputOffset
から始まるinput
バッファ内の最初のinputLen
バイト、および前のupdate
操作でバッファに入れられた可能性のあるすべての入力バイトが処理され、パディング(要求された場合)が適用されます。 GCM/CCMなどのAEADモードが使用されている場合は、認証タグが暗号化の際に追加されるか、復号化の際に検証されます。 結果は新しいバッファに格納されます。終了時に、このメソッドはこの暗号オブジェクトを前に
engineInit
を呼び出して初期化されたときの状態にリセットします。 つまり、オブジェクトはリセットされて、さらにデータを暗号化または復号化するために使用できます(engineInit
の呼出しで指定された操作モードにより異なります)。注: 例外がスローされた場合、この暗号オブジェクトはリセットしないと再度使用できない場合があります。
- パラメータ:
input
- 入力バッファinputOffset
- 入力を開始するinput
内のオフセットinputLen
- 入力長- 戻り値:
- 結果の入った新しいバッファ
- 例外:
IllegalBlockSizeException
- この暗号がブロック暗号であり、パディングが要求されておらず(暗号化モードの場合のみ)、この暗号で処理されたデータの入力長の合計がブロック・サイズの倍数でない場合。または、この暗号化アルゴリズムが、指定された入力データを処理できない場合。BadPaddingException
- この暗号が復号化モードであり、パディング(またはパディング解除)が要求されたが、復号化されたデータが適切なパディング・バイトでバインドされない場合。AEADBadTagException
- この暗号がAEADモード(GCM/CCMなど)で復号化し、受け取った認証タグが計算された値と一致しない場合。
-
engineDoFinal
protected abstract int engineDoFinal(byte[] input, int inputOffset, int inputLen, byte[] output, int outputOffset) throws ShortBufferException, IllegalBlockSizeException, BadPaddingException単一の部分から成る操作でデータを暗号化または復号化するか、複数の部分から成る操作を終了します。 データは、この暗号が初期化された方法に従って、暗号化または復号化されます。inputOffset
から始まるinput
バッファ内の最初のinputLen
バイト、および前のupdate
操作でバッファに入れられた可能性のあるすべての入力バイトが処理され、パディング(要求された場合)が適用されます。 GCM/CCMなどのAEADモードが使用されている場合は、認証タグが暗号化の際に追加されるか、復号化の際に検証されます。 結果は、outputOffset
から始まるoutput
バッファに格納されます。output
バッファが小さすぎて結果を保持できない場合は、ShortBufferException
がスローされます。終了時に、このメソッドはこの暗号オブジェクトを前に
engineInit
を呼び出して初期化されたときの状態にリセットします。 つまり、オブジェクトはリセットされて、さらにデータを暗号化または復号化するために使用できます(engineInit
の呼出しで指定された操作モードにより異なります)。注: 例外がスローされた場合、この暗号オブジェクトはリセットしないと再度使用できない場合があります。
- パラメータ:
input
- 入力バッファinputOffset
- 入力を開始するinput
内のオフセットinputLen
- 入力長output
- 結果を格納するバッファoutputOffset
- 結果が格納されるoutput
内のオフセット- 戻り値:
output
に格納されたバイト数- 例外:
IllegalBlockSizeException
- この暗号がブロック暗号であり、パディングが要求されておらず(暗号化モードの場合のみ)、この暗号で処理されたデータの入力長の合計がブロック・サイズの倍数でない場合。または、この暗号化アルゴリズムが、指定された入力データを処理できない場合。ShortBufferException
- 指定された出力バッファが小さすぎて結果を保持できない場合BadPaddingException
- この暗号が復号化モードであり、パディング(またはパディング解除)が要求されたが、復号化されたデータが適切なパディング・バイトでバインドされない場合。AEADBadTagException
- この暗号がAEADモード(GCM/CCMなど)で復号化し、受け取った認証タグが計算された値と一致しない場合。
-
engineDoFinal
protected int engineDoFinal(ByteBuffer input, ByteBuffer output) throws ShortBufferException, IllegalBlockSizeException, BadPaddingException単一の部分から成る操作でデータを暗号化または復号化するか、複数の部分から成る操作を終了します。 データは、この暗号が初期化された方法に従って、暗号化または復号化されます。input.position()
から始まるすべてのinput.remaining()
バイトが処理されます。 GCM/CCMなどのAEADモードが使用されている場合は、認証タグが暗号化の際に追加されるか、復号化の際に検証されます。 結果はoutputバッファに格納されます。 終了時に、入力バッファの位置はリミットに等しくなりますが、リミットは変更されません。 出力バッファの位置はnだけ増加します。nは、このメソッドが返す値です。出力バッファのリミットは変更されません。output.remaining()
バイトが結果を保持するのに不十分な場合は、ShortBufferException
がスローされます。終了時に、このメソッドはこの暗号オブジェクトを前に
engineInit
を呼び出して初期化されたときの状態にリセットします。 つまり、オブジェクトはリセットされて、さらにデータを暗号化または復号化するために使用できます(engineInit
の呼出しで指定された操作モードにより異なります)。注: 例外がスローされた場合、この暗号オブジェクトはリセットしないと再度使用できない場合があります。
ByteBufferをバイト配列よりも効率的に処理できる場合、このメソッドをサブクラスでオーバーライドすることを検討してください。
- パラメータ:
input
- 入力ByteBufferoutput
- 出力ByteBuffer- 戻り値:
output
に格納されたバイト数- 例外:
IllegalBlockSizeException
- この暗号がブロック暗号であり、パディングが要求されておらず(暗号化モードの場合のみ)、この暗号で処理されたデータの入力長の合計がブロック・サイズの倍数でない場合。または、この暗号化アルゴリズムが、指定された入力データを処理できない場合。ShortBufferException
- 出力バッファ内に残っている容量が不足している場合BadPaddingException
- この暗号が復号化モードであり、パディング(またはパディング解除)が要求されたが、復号化されたデータが適切なパディング・バイトでバインドされない場合。AEADBadTagException
- この暗号が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)提供されたバッファのサブセットを使用して、Additional Authentication Data (AAD)のマルチパート更新を続行します。暗号がAEAD (GCM/CCM)などのモードで操作されると、このメソッドの呼出しでAADが提供されます。 この暗号がGCMまたはCCMモードで操作されている場合は、(
update
およびdoFinal
メソッドを介した)暗号テキスト上の操作を開始する前に、すべてのAADが提供される必要があります。- パラメータ:
src
- AADを格納するバッファoffset
- AAD入力を開始するsrc
内のオフセットlen
- AADバイトの数- 例外:
IllegalStateException
- この暗号が誤った状態であり(まだ初期化されていないなど)、AADを受け入れない場合、またはGCMまたはCCMモードで操作していて、アクティブな暗号化/復号化操作に対してすでにupdate
メソッドが呼び出されている場合UnsupportedOperationException
- このメソッドが実装によってオーバーライドされていない場合- 導入されたバージョン:
- 1.7
-
engineUpdateAAD
protected void engineUpdateAAD(ByteBuffer src)AAD (Additional Authentication Data)のマルチパート更新を継続します。暗号がAEAD (GCM/CCM)などのモードで操作されると、このメソッドの呼出しでAADが提供されます。 この暗号がGCMまたはCCMモードで操作されている場合は、(
update
およびdoFinal
メソッドを介した)暗号テキスト上の操作を開始する前に、すべてのAADが提供される必要があります。src.position()
から始まるすべてのsrc.remaining()
バイトが処理されます。 終了時に、入力バッファの位置はリミットに等しくなりますが、リミットは変更されません。- パラメータ:
src
- AADを格納するバッファ- 例外:
IllegalStateException
- この暗号が誤った状態であり(まだ初期化されていないなど)、AADを受け入れない場合、またはGCMまたはCCMモードで操作していて、アクティブな暗号化/復号化操作に対してすでにupdate
メソッドが呼び出されている場合UnsupportedOperationException
- このメソッドが実装によってオーバーライドされていない場合- 導入されたバージョン:
- 1.7
-