我正在尝试从赏金城堡获得一个使用threefish 512加密的jdbc hsqldb实例。Hsqldb支持通过连接url:props来配置它。我熟悉密码学的基本原理,但从未与JCE、赏金城堡等合作过。
我首先将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位键。我怀疑关键是这里的问题。调试密码类显示,键确实被解析为64个字节的数组。
在将赏金城堡添加为提供者之后,我是否需要对其进行某种配置?关于这个主题的简单信息似乎在互联网上是相当稀少的,赏金城堡关于这个问题的三次或其他提到或者我能找到的任何东西都没有快速的开始。
Spring引导项目,hsqldb 2.4.0,奖助金城堡1.59来自maven org.藏匿城堡:bcprov-jdk15on。一切都已经正常工作了(db连接等等),我只是想在此基础上添加db的加密。通常,您所需要做的就是将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);
发布于 2018-03-26 18:38:49
叹一口气。愚蠢的美国立法者和他们的恶作剧。我使用的是java 8u151,它仍然具有受限的密码策略。升级到u161解决了这个问题。
https://stackoverflow.com/questions/49490421
复制相似问题