Независимая от поставщика криптография в Java?

Я пытаюсь написать программу на Java, которая будет подписывать записи в базе данных перед вставкой. Я хотел бы, чтобы программа была независимой от алгоритма - в идеале, пользователь должен указать JCE-провайдера и алгоритм в качестве аргументов во время выполнения.

Есть ли способ сделать это? Я тестировал с поставщиком BouncyCastle, и код работает нормально, когда я его динамически регистрирую:

Security.addProvider(new BouncyCastleProvider());

Однако, когда я пытаюсь статически зарегистрировать провайдера, добавив следующие строки в конец моего файла security/java.policy, я получаю сообщение об ошибке: java.security.NoSuchProviderException: no such provider: BC когда я пытаюсь получить экземпляр объекта безопасности с помощью провайдера.

security.provider.1=sun.security.provider.Sun
security.provider.2=org.bouncycastle.jce.provider.BouncyCastleProvider

В частности, я добавил эти строки в /etc/java-7-openjdk/security/java.policy (который связан с $JAVA_HOME/jre/lib/security/java.policy). Это на Ubuntu 12.04. Я также попытался просто добавить BouncyCastleProvider в качестве первой записи и получил ту же ошибку.

Я неправильно настраиваю статическую регистрацию или я пытаюсь сделать это невозможным?

1 ответ

Решение

Я думаю, что вы добавляете статическую регистрацию в неправильный файл. использование security.policy вместо java.policy в той же папке.

См.: https://www.bouncycastle.org/wiki/display/JA1/Provider+Installation

Другие вопросы по тегам