Java 中的提供商独立加密?

Provider-independent crypto in 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 添加为第一个条目,但得到了同样的错误。

我是否配置了静态注册错误或者我正在尝试的是不可能的?

我认为您将静态注册添加到了错误的文件中。 在同一文件夹中使用 security.policy 而不是 java.policy

参见:https://www.bouncycastle.org/wiki/display/JA1/Provider+Installation