モジュール java.base
パッケージ javax.crypto

クラスCipherSpi

java.lang.Object
javax.crypto.CipherSpi

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の各組み合わせに対して個別のクラスを提供するか、あるいはalgorithmalgorithm/mode、またはalgorithm//padding (二重スラッシュに注意)に対応するサブ変換を表すより汎用のクラスを提供することができます。汎用のクラスを提供する場合、要求されたモードやパディングは、プロバイダのCipherSpiのサブクラスのengineSetModeおよびengineSetPaddingメソッドを呼び出す、CiphergetInstanceメソッドにより自動的に設定されます。

プロバイダのマスター・クラス内の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/PKCS5PaddingAES/CBC/PKCS5PaddingAES/CFB/PKCS5Padding、さらにはAES/OFB/PKCS5Paddingをそれぞれ実装するCipherSpiのサブクラスを提供できます。 このプロバイダは、マスター・クラス内に次のCipherプロパティを保持します。

  •      Cipher.AES/ECB/PKCS5Padding
     
  •      Cipher.AES/CBC/PKCS5Padding
     
  •      Cipher.AES/CFB/PKCS5Padding
     
  •      Cipher.AES/OFB/PKCS5Padding
     

別のプロバイダは、上の各モードのためのクラス(つまり、ECBCBCCFBOFBのためにそれぞれ1つのクラス)、PKCS5Paddingのための1つのクラス、およびCipherSpiからサブクラス化された汎用AESクラスを実装できます。 このプロバイダは、マスター・クラス内に次のCipherプロパティを保持します。

  •      Cipher.AES
     

algorithm」形式の変換の場合、Cipherエンジン・クラスのgetInstanceファクトリ・メソッドは、次のルールに従ってプロバイダのCipherSpiの実装をインスタンス化します。

  1. プロバイダが、指定された「algorithm」に対応するCipherSpiのサブクラスを登録済みかどうかをチェックする。

    登録済みの場合、このクラスをインスタンス化して、このモードおよびパディング方式のデフォルト値(プロバイダにより提供)を使用可能にします。

    未登録の場合、例外NoSuchAlgorithmExceptionをスローします。

algorithm/mode/padding」形式の変換の場合、Cipherエンジン・クラスのgetInstanceファクトリ・メソッドは、次のルールに従ってプロバイダのCipherSpiの実装をインスタンス化します。

  1. プロバイダが、指定された「algorithm/mode/padding」変換に対応するCipherSpiのサブクラスを登録済みかどうかをチェックする。

    登録済みの場合、このクラスをインスタンス化します。

    未登録の場合、次のステップに進みます。

  2. プロバイダが、サブ変換「algorithm/mode」に対応するCipherSpiのサブクラスを登録済みかどうかをチェックする。

    登録済みの場合、インスタンス化してから、新規インスタンスに対しengineSetPadding(padding)を呼び出します。

    未登録の場合、次のステップに進みます。

  3. プロバイダが、サブ変換「algorithm//padding」(ダブル・スラッシュに注意)に対応するCipherSpiのサブクラスを登録済みかどうかをチェックする。

    登録済みの場合、インスタンス化してから、新規インスタンスに対しengineSetMode(mode)を呼び出します。

    未登録の場合、次のステップに進みます。

  4. プロバイダが、サブ変換「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)
    キーをラップします。

    クラス java.lang.Objectで宣言されたメソッド

    cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait
  • コンストラクタの詳細

  • メソッドの詳細

    • 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_MODEDECRYPT_MODEWRAP_MODE、またはUNWRAP_MODEのどれか)
      key - 暗号化キー
      random - 乱数発生の元
      例外:
      InvalidKeyException - 指定されたキーがこの暗号の初期化に不適切な場合、または指定されたキーから判定することができないアルゴリズム・パラメータを必要とする場合。
      UnsupportedOperationException - opmodeWRAP_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_MODEDECRYPT_MODEWRAP_MODE、またはUNWRAP_MODEのどれか)
      key - 暗号化キー
      params - アルゴリズム・パラメータ
      random - 乱数発生の元
      例外:
      InvalidKeyException - 指定されたキーがこの暗号の初期化に不適切な場合
      InvalidAlgorithmParameterException - 指定されたアルゴリズム・パラメータがこの暗号に不適切な場合、またはこの暗号がアルゴリズム・パラメータを必要とし、paramsがnullの場合。
      UnsupportedOperationException - opmodeWRAP_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_MODEDECRYPT_MODEWRAP_MODE、またはUNWRAP_MODEのどれか)
      key - 暗号化キー
      params - アルゴリズム・パラメータ
      random - 乱数発生の元
      例外:
      InvalidKeyException - 指定されたキーがこの暗号の初期化に不適切な場合
      InvalidAlgorithmParameterException - 指定されたアルゴリズム・パラメータがこの暗号に不適切な場合、またはこの暗号がアルゴリズム・パラメータを必要とし、paramsがnullの場合。
      UnsupportedOperationException - opmodeWRAP_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 - 入力ByteBuffer
      output - 出力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 - 入力ByteBuffer
      output - 出力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_KEYPRIVATE_KEY、またはPUBLIC_KEYのいずれかです。
      戻り値:
      ラップ解除されたキー
      例外:
      NoSuchAlgorithmException - インストールされているどのプロバイダもwrappedKeyAlgorithmwrappedKeyTypeタイプのキーを作成できない場合。
      InvalidKeyException - wrappedKeywrappedKeyAlgorithmwrappedKeyTypeタイプのラップされたキーを表さない場合。
      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