17

AES/CBC/PKCS5Padding 用のカスタム セキュリティ プロバイダーを作成しました。それはうまくいきます。

ProviderJava が上記のアルゴリズムの有効なプロバイダーとして認識できるようにするには、どのような設定を追加する必要がありますか? 私は既に持っています

public class FooBarProvider extends Provider {
  public FooBarProvider() {
    super("FooBar", 1.0, "Provider for AES.");
    put("Cipher.AES", "foo.bar.AESCipher");
  }
}

後者の引数はCipherSpi、作業を行う実際の引数です。CBC と PKCS5Padding をサポートしていることをどこに登録すればよいですか? 現在、関連するものを要求してCipherも、クラスのインスタンスが返されません:

Security.insertProviderAt(new FooBarProvider(), 1);
Cipher cip = Cipher.getInstance("AES/CBC/PKCS5Padding");
System.out.println(cip.getProvider()); //prints "SunJCE version 1.7"
4

2 に答える 2

10

コードの記述は、プロセスの非常に単純な部分です。クラスがAESの暗号実装を提供することをすでに宣言しています。この行:

put("Cipher.AES", "foo.bar.AESCipher");

タスクを実行するために必要なのはほとんどすべてです。また、暗号の実装をアルゴリズムレベルで登録しているため、モードパディングのすべての組み合わせに対して実装が自動的に呼び出されることに注意してください。

そうは言っても、コードを書くのは簡単な部分でした。暗号を作成しているため、JARをプロバイダーとしてインストールおよび構成する前に、JARに署名する必要があります。このプロセスは多少複雑なので、ここではすべてをコピーするのではなく、プロバイダーの実装方法に関するOracleガイドを参照します。これは、このタスクの優れた情報源です。

ガイドに従っても問題が解決しない場合は、インストールしたJDKに適したJCE UnlimitedStrengthPolicyをダウンロードしてインストールする必要があります。

于 2012-04-08T07:01:58.500 に答える
5

Java Cryptoのドキュメントでは、Providerクラスを登録するためのメカニズムについて説明しています。

短いバージョンは次のとおりです。

  1. プロバイダーJARをクラスパスまたはJavaインストールの拡張ディレクトリに配置します。
  2. プロバイダーを登録します。
    • 詳細を手動でjava.security構成ファイルに編集する($JAVA_HOME/lib/security/java.security)、または
    • Security.addProvider実行時に、またはを呼び出しますSecurity.insertProviderAt
于 2012-04-08T04:34:30.030 に答える