モジュール 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のサブクラスを登録済みかどうかをチェックする。

    回答がYESの場合はインスタンス化し、新しいインスタンスでengineSetPadding(<i>padding</i>)をコールします。

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

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

    回答がYESの場合はインスタンス化し、新しいインスタンスでengineSetMode(<i>mode</i>)をコールします。

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

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

    回答がYESの場合はインスタンス化し、新しいインスタンスでengineSetMode(<i>mode</i>)およびengineSetPadding(<i>padding</i>)をコールします。

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

導入されたバージョン:
1.4
関連項目: