2013-08-08 6 views
5

Gibt es eine Begründung für die Entscheidung, die Sun getroffen hat, um die Standardnamen für kryptografische Algorithmen anstelle von benannten Konstanten zu erstellen?Standardnamen ohne benannte Konstanten

Es scheint, dass Sun (nun, jetzt Oracle) eine explizite Anstrengung in documenting algorithm names durchführt, aber nicht stark definierte benannte Konstanten innerhalb der Bibliotheken bereitstellt. Ich verstehe, dass aus einer plattformübergreifenden Perspektive der String-Search-Ansatz vorteilhaft ist.

Allerdings bedeutet dies, dass programmatische Fehler zur Laufzeit verzögert werden, was ich nur als schwierig empfinden kann. Warum ist das?

+1

Wahrscheinlich war ein Design-Problem, das sie noch nicht behoben haben. Sie können Ihre eigenen Konstanten (wahrscheinlich in einer 'enum') haben, die auf die Namen der Algorithmen zeigen. Es wäre besser, dies in Oracle-Foren anstatt hier zu posten. –

+0

@LuiggiMendoza Ich habe einige zusätzliche Gründe hinzugefügt, die Einfluss auf die Auswahl von Strings über Konstanten haben könnten. Ich bin mir ziemlich sicher, dass dies ein Feature ist, kein Problem. –

Antwort

1

Ich würde vermuten, dass dies Ihnen erlauben wird, Ihre eigenen nicht standardmäßigen Namen und Fabrikimplementierungen zu entwickeln. (Oder erlauben Sie zukünftige Plug-Ins, die Namen verwenden, die noch nicht existieren), ohne Kompilierungsfehler zu verursachen.

Dies würde Benutzern auch ermöglichen, neue Crypto-Klassen zur Laufzeit hinzuzufügen, indem Klassen zum Klassenpfad hinzugefügt werden, die zur Kompilierungszeit nicht bekannt waren.

1

Die String verwendet in z.B. Cipher.getInstance(String algorithm) enthält keinen einzigen Namen, es enthält auch die Transformationen. Sie würden etwas wie "DES/CFB8/NoPadding" haben, das den DES-Algorithmus im Cipher-Feedback-Modus mit 8-Bit-Ausgabe anzeigt, die keine Auffüllung erfordert. Diese Kombination kann auch für andere Verschlüsselungen verwendet werden. Dies würde also bereits eine Anzahl von Konstanten erzeugen, die cipher * modes * bitsizes * paddingmodes entsprechen. Jetzt könnten Sie separate Enumerationen erstellen, aber Sie können bereits sehen, wo es anfangen würde zu schmerzen.

Strings sind viel flexibler als enums oder (gehen Sie nicht dort) Konstanten. Dies macht es sehr einfach, zusätzliche Algorithmen hinzuzufügen. Sie können sogar Algorithmen hinzufügen und sie in ältere Software konfigurieren; Fügen Sie einfach einen Anbieter hinzu, der den angegebenen Algorithmus implementiert. Dies ist sehr wichtig, wenn es in einem dynamischen Framework verwendet wird, das von Anbietern und Diensten aufgebaut wird.

Wie Luiggi anmerkte, wäre es ziemlich einfach, eine Fabrik zu erstellen, die eine Enum-Nummer nimmt und eine Cipher oder Signature Instanz zurückgibt. Sie müssten die Fabrik nur einmal testen.

+0

Oder ein Bullder mit dem fließenden Interface-Muster. –

+0

@LuiggiMendoza sicher, obwohl ich persönlich das Designmuster * das * viel nicht mag. Sie erhalten also 'cipherBuilder.setAlgorithm (ALGO) .setMode (MODE) .buildCipher()'? –