我正在尝试从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
未修复此问题。
我接着补充道
Security.addProvider(new BouncyCastleProvider());
在jdbc初始化之前和现在
crypt\u type=Threefish-512;crypt\u key=de7e。。。
(没有crypt\u提供程序)似乎最有效。但它会引发新的异常:
密钥大小或默认参数非法
我的crypt\u密钥是128个十六进制字符,因此是512位密钥。我怀疑关键是这里的问题。调试Cipher类表明密钥确实被解析为64字节的数组。
在将bouncycastle/threefish添加为提供者后,我是否需要对其进行某种配置?关于这个主题的简单信息在互联网上似乎非常稀少,bouncycastle的《三条鱼》或其他关于这个问题的提及或我能找到的任何东西都没有快速的开始。
Spring boot项目,hsqldb 2.4.0,来自maven org的bouncycastle 1.59。bouncycastle:bcprov-jdk15on。一切都已经正常了(db连接等等),我只是想在上面添加db加密。通常,您需要做的就是将crypt\u*参数添加到连接字符串中,剩下的由hsqldb处理。
public static void main(String[] args) {
Security.addProvider(new BouncyCastleProvider());
ConfigurableApplicationContext app = SpringApplication.run(App.class, args);
应用属性
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);