我正在尝试使用bouncycastle中的threefish-512加密jdbc hsqldb实例。 Hsqldb支持通过连接URL:http://hsqldb.org/doc/guide/dbproperties-chapt.html#dpc_crypt_props进行配置。我熟悉密码学的基本知识,但从未使用过JCE,bouncycastle等。
我首先将crypt_type=Threefish-512;crypt_key=de7e...
添加到我的连接字符串中。这引发了关于未知提供者和算法的异常。指定crypt_provider=org.bouncycastle.jce.provider.BouncyCastleProvider
并未解决此问题。
然后我在jdbc初始化之前将Security.addProvider(new BouncyCastleProvider());
添加到我的代码中,现在crypt_type=Threefish-512;crypt_key=de7e...
(没有crypt_provider)似乎主要工作。它引发了一个新的例外:
非法密钥大小或默认参数
我的crypt_key是128个十六进制字符,因此它是一个512位密钥。我怀疑关键是这里的问题。调试Cipher类显示密钥确实被解析为64字节的数组。
在将bouncycastle / threefish作为提供者添加后,是否需要对其进行某种配置?关于这个主题的简单信息似乎在互联网上非常稀少,没有快速开始bouncycastle的三鱼或其他提到这个问题或我能找到的任何东西。
Spring启动项目,hsqldb 2.4.0,bouncycastle 1.59来自maven org.bouncycastle:bcprov-jdk15on。一切都已经有效(数据库连接等),我只是想在它上面添加数据库的加密。通常,您需要做的就是将crypt_ *参数添加到连接字符串中,hsqldb将处理其余的。
public static void main(String[] args) {
Security.addProvider(new BouncyCastleProvider());
ConfigurableApplicationContext app = SpringApplication.run(App.class, args);
application.properties
spring.datasource.url=jdbc:hsqldb:${app.db.path};create=${spring.datasource.initialize};hsqldb.tx=mvlocks;hsqldb.tx_level=serializable;crypt_type=Threefish-512;crypt_key=de7e...
我错过了这样的事情吗?
BouncyCastleProvider provider = new BouncyCastleProvider();
provider.setParameter("foo", "bar");
Security.addProvider(provider);
答案 0 :(得分:1)
叹息。愚蠢的美国立法者和他们的恶作剧。我使用的是java 8u151,它仍然具有受限制的加密策略。更新到u161解决了这个问题。