2013-08-08 4 views
5

Есть ли обоснование решения Sun, сделанного для создания стандартных имен для криптографических алгоритмов вместо именных констант?Стандартные имена без именных констант

Кажется, что Sun (ну, теперь Oracle) выдвигает явное усилие в documenting algorithm names, но не предоставляет строго определенных именованных констант в библиотеках. Я понимаю, что с кросс-платформенной точки зрения подход строкового поиска выгоден.

Однако при этом программные ошибки задерживаются во время выполнения, что я вижу только в том, что делаю вещи сложнее, чем необходимо. Почему это?

+1

Возможно, это была проблема с дизайном, которую они еще не зафиксировали. У вас могут быть свои собственные константы (возможно, в «enum»), которые указывают на имена алгоритмов. Было бы лучше разместить это на форумах Oracle, а не здесь. –

+0

@LuiggiMendoza Я добавил несколько дополнительных причин, которые могли повлиять на выбор строк над константами. Я уверен, что это особенность, а не проблема. –

ответ

1

Я бы предположил, что это позволит вам придумать свои собственные нестандартные имена и заводские реализации. (Или разрешить будущие плагины, которые используют имена, которые еще не существуют), не вызывая ошибок компиляции.

Это также позволит пользователям добавлять новые крипто-классы во время выполнения, добавляя классы к пути класса, которые не были известны во время компиляции.

1

String, используемый в, например, Cipher.getInstance(String algorithm) не содержит ни одного имени, он также содержит преобразования. У вас было бы что-то вроде "DES/CFB8/NoPadding", которое указывает алгоритм DES, в режиме обратной связи Cipher с 8-разрядным выходом, не требующим заполнения. В эту комбинацию можно использовать и другие шифры. Таким образом, это уже создало бы ряд констант, равных cipher * modes * bitsizes * paddingmodes. Теперь вы можете создавать отдельные перечисления, но вы уже можете увидеть, где он начнет болеть.

Строки гораздо более гибкие, чем переходы или (даже не туда). Это упрощает добавление дополнительных алгоритмов. Вы даже можете добавить алгоритмы и настроить их в устаревшее программное обеспечение; просто добавьте поставщика, который реализует данный алгоритм. Это очень важно при использовании в динамической структуре, создаваемой поставщиками и службами.

Как указал Луиджи, было бы довольно легко создать завод, который перечислит и вернет экземпляр Cipher или Signature. Вам нужно будет только один раз проверить завод.

+0

Или бульдозер с плавным интерфейсом. –

+0

@ LuiggiMendoza наверняка, хотя лично мне не нравится этот дизайн рисунок * это * много. Таким образом, вы получите 'cipherBuilder.setAlgorithm (ALGO) .setMode (MODE) .buildCipher()'? –

Смежные вопросы