Независимая от поставщика криптография в 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