Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Derby/JavaDB真的能用三重DES而不是(普通)DES加密吗?_Java_Derby_Encryption Symmetric - Fatal编程技术网

Derby/JavaDB真的能用三重DES而不是(普通)DES加密吗?

Derby/JavaDB真的能用三重DES而不是(普通)DES加密吗?,java,derby,encryption-symmetric,Java,Derby,Encryption Symmetric,它似乎混淆了三重DES(>128位)和普通DES(64位)。 我正在尝试使用Java1.5用三重DES(或DESede)加密Derby数据库 我偶然发现了这个,所以检查以确保它确实使用了DESede而不是普通DES。当我用三重DES(168bit)URL创建数据库时 我仍然能够打开它并使用(普通的)DES(64位)URL访问它 这不是我期望的行为!!!我不能用错误的加密算法打开它。如何确保它使用正确的(>128位)算法进行加密 Derby似乎为中提到的Java1.5使用了正确的函数。我对代码的阅

它似乎混淆了三重DES(>128位)和普通DES(64位)。 我正在尝试使用Java1.5用三重DES(或DESede)加密Derby数据库

我偶然发现了这个,所以检查以确保它确实使用了DESede而不是普通DES。当我用三重DES(168bit)URL创建数据库时

我仍然能够打开它并使用(普通的)DES(64位)URL访问它

这不是我期望的行为!!!我不能用错误的加密算法打开它。如何确保它使用正确的(>128位)算法进行加密

Derby似乎为中提到的Java1.5使用了正确的函数。我对代码的阅读表明,Derby处理三重DES与处理普通DES不同。。。我真的可以相信它正在使用强加密吗?

根据《Java DB开发人员指南》,第一个URL在创建数据库时对数据库进行加密看起来很好(因为它指定了
dataEncryption=true
),并且应该生成一个168位的加密密钥

现在,仍然根据文档,我认为在启动加密数据库时不应该使用
dataEncryption=true
。我的理解是,您只需要使用
bootPassword
encryptionAlgorithm

我承认我没有测试这个,事实上,我真的很想知道到底发生了什么:

  • 如果未指定
    dataEncryption
    并在第二个URL中使用错误的
    encryptionAlgorithm
  • 当您指定
    dataEncryption=true
    并使用另一个
    encryptionAlgorithm
    (它是否重新创建加密的数据库?)

文档对此并不清楚。

我认为encryptionAlgorithm参数只在您第一次进行加密时才起作用(即,当您第一次创建加密数据库时,或当您第一次加密未加密的数据库时)


一旦加密了数据库,从那时起,只需指定引导密码。Derby已经知道使用了什么加密算法。

我认为文档是错误的,您实际上不需要指定使用非默认算法时使用的加密算法,因为应该使用的算法在$Derby_HOME/database/service.properties中指定

在我的情况下,当我使用您的参数创建数据库时,我的service.properties包含以下内容(以及其他不相关的条目):

您可以通过更改所使用的算法来验证是否使用了该方法。如果将该文件中指定的算法更改为DES,则将无法重新启动数据库

例如:

$ ../bin/ij
ij version 10.4
ij> connect 'jdbc:derby:testdb;create=true;dataEncryption=true;encryptionAlgorithm=Blowfish/ECB/NoPadding;bootPassword=$ecureC@deCanBr@kE0074242';
ij> quit;
$ sed -i .o 's/Blowfish/DES/' testdb/service.properties 
$ ../bin/ij
ij version 10.4
ij> connect 'jdbc:derby:testdb;bootPassword=$ecureC@deCanBr@kE0074242';
ERROR XJ040: Failed to start database 'testdb', see the next exception for details.
ERROR XBM06: Startup failed. An encrypted database cannot be accessed without the correct boot password.  
ij> quit;
$ sed -i .o 's/DES/Blowfish/' testdb/service.properties 
$ ../bin/ij
ij version 10.4
ij> connect 'jdbc:derby:testdb;bootPassword=$ecureC@deCanBr@kE0074242';
ij> quit;
$ 

我正在将J2SE 1.5.018与Apache Derby 10.5.3.0(最新版本)一起使用。顶级URL实际上有“create=true”,但为了比较清楚,这里省略了它。感谢您的想法。当我在没有“dataEncryption=true”的情况下第二次启动时,它仍然会启动一个据称是三重DES加密的数据库,并使用纯DES。难道密钥不包含所有必需的内容吗?我想确保它是使用强(>=128位)加密的,而不是64位加密的。虽然引导密码足够大,可以容纳168bit(三重DES),但我认为它也可以用于64位,而忽略额外的字符。密钥大小(encryptionKeyLength参数)似乎不受尊重。请解释一下你的意思?谢谢你的努力,帕斯卡!他们非常有助于达成解决方案。祝你幸福!感谢您的澄清,现在我明白了Pascal想说的话,但我不相信这是正确的:引导加密数据库:如果创建数据库时使用的算法不是默认算法,则还必须指定encryptionAlgorithm属性。Derby使用的默认加密算法是DES/CBC/NoPadding。“看起来文档中在这些方面确实存在一些弱点,在某些情况下,Derby会悄悄地忽略您的连接属性,而不是明确警告您这些属性正在被忽略。其中一些已经记录在Apache JIRA中(例如,DERBY-4328、DERBY-2409)。如果您可以访问Derby站点并记录您发现的其他一些问题,这样我们就可以改进Derby的文档和错误处理,这将是非常棒的。顺便说一句,我认为保罗·瓦格兰(Paul Wagland)下面的回答非常透彻和有帮助。谢谢布莱恩的客气话!谢谢你的帮助,布莱恩!我提出了一个错误。祝你新年快乐!感谢您清晰详细的解释和演示。我自己测试了一下,确信它是安全的。祝你圣诞快乐(如果你庆祝的话)新年快乐!
jdbc:derby:MySecureDB;dataEncryption=true;encryptionAlgorithm=DES/CBC/NoPadding;bootPassword=$ecureC@deCanBr@kE0074242
log_encrypt_algorithm_version=1
encryptionAlgorithm=DESede/CBC/NoPadding
dataEncryption=true
derby.encryptionBlockSize=8
encryptionKeyLength=168-24
encryptedBootPassword=472b7cc5600605333392dd10a46067d2e2935fd4c350d533-43435
data_encrypt_algorithm_version=1
$ ../bin/ij
ij version 10.4
ij> connect 'jdbc:derby:testdb;create=true;dataEncryption=true;encryptionAlgorithm=Blowfish/ECB/NoPadding;bootPassword=$ecureC@deCanBr@kE0074242';
ij> quit;
$ sed -i .o 's/Blowfish/DES/' testdb/service.properties 
$ ../bin/ij
ij version 10.4
ij> connect 'jdbc:derby:testdb;bootPassword=$ecureC@deCanBr@kE0074242';
ERROR XJ040: Failed to start database 'testdb', see the next exception for details.
ERROR XBM06: Startup failed. An encrypted database cannot be accessed without the correct boot password.  
ij> quit;
$ sed -i .o 's/DES/Blowfish/' testdb/service.properties 
$ ../bin/ij
ij version 10.4
ij> connect 'jdbc:derby:testdb;bootPassword=$ecureC@deCanBr@kE0074242';
ij> quit;
$