String
は、例えば、 Cipher.getInstance(String algorithm)
には単一の名前が含まれていないため、変換も含まれています。あなたは、パディングを必要としない8ビット出力の暗号フィードバックモードで、DESアルゴリズムを示す"DES/CFB8/NoPadding"
のようなものを持っています。この組み合わせは、他の暗号でも使用できます。したがって、これはすでにcipher * modes * bitsizes * paddingmodes
に等しい数の定数を生成します。今では別々の列挙を作成することができますが、既にどこが傷つき始めるかを見ることができます。
文字列は、列挙型よりもはるかに柔軟性があり、定数もそこにはありません。これにより、アルゴリズムを追加するのが非常に簡単になります。アルゴリズムを追加して、より古いソフトウェアに設定することもできます。指定されたアルゴリズムを実装するプロバイダを追加するだけです。これは、プロバイダとサービスから構築された動的なフレームワークで使用する場合に非常に重要です。
Luiggiが示しているように、enumを取り、Cipher
またはSignature
インスタンスを返すファクトリを作成するのは簡単です。あなたは一度だけ工場をテストする必要があります。
おそらくまだ修正されていない設計上の問題でした。あなたは、アルゴリズムの名前を指し示す独自の定数(おそらく 'enum'の中に)を持つことができます。ここではなく、Oracleフォーラムでこれを投稿する方がよいでしょう。 –
@LuiggiMendoza私は、定数よりも文字列を選択するのに影響があったかもしれないいくつかの理由を追加しました。私はこれが機能であり、問題ではないと確信しています。 –