它似乎混淆了 Triple-DES(>128 位)和普通 DES(64 位)。 我正在尝试使用 Java 1.5 使用 Triple DES(或 DESede)加密 Derby 数据库
我找到了这个 discussion forum message about a problem with JDK 1.5偶然,所以检查以确保它确实使用了 DESede 而不是普通的 DES。当我使用三重 DES(168 位)URL 创建数据库时
jdbc:derby:MySecureDB;dataEncryption=true;encryptionAlgorithm=DESede/CBC/NoPadding;bootPassword=$ecureC@deCanBr@kE0074242
我仍然能够打开它并使用(普通)DES(64 位)URL 访问它
jdbc:derby:MySecureDB;dataEncryption=true;encryptionAlgorithm=DES/CBC/NoPadding;bootPassword=$ecureC@deCanBr@kE0074242
这不是我期望的行为!!!我应该无法使用错误的加密算法打开它。我如何才能确保它确实使用正确的(>128 位)算法对其进行了加密?
Derby 似乎使用了 JCECipherProvider.java 中提到的适用于 Java 1.5 的正确函数.我对代码的阅读表明 Derby 处理三重 DES 的方式与普通 DES 不同...我真的可以相信它使用的是强加密吗?
最佳答案
我认为文档是错误的,并且当使用非默认算法时您实际上不需要指定要使用的加密算法,因为应该使用的算法在 $DERBY_HOME/database/service 中指定。属性
就我而言,当我使用您的参数创建数据库时,我的 service.properties 具有以下内容(以及其他不相关的条目):
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
您可以通过更改所使用的算法来验证它是否已被使用。如果将该文件中的指定算法更改为 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;
$
关于java - Derby/JavaDB _真的_可以使用 Triple DES 而不是(普通的)DES 进行加密吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1925134/