java - Derby/JavaDB _真的_可以使用 Triple DES 而不是(普通的)DES 进行加密吗?

标签 java derby encryption-symmetric

它似乎混淆了 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/

相关文章:

c# - 将 Delphi 代码翻译成 C# (Blowfish)

javascript - 使用另一个字符串键 "encrypt"字符串的最简单方法?

java - AWS Java SDK v2 应将哪个区域终端节点用于 Route 53?

java - HelloWorld servlet : eclipse ee tomcat 6 error

sql - 查找每个团队本垒打最高的人(DERBY/SQL)

mysql - 学习 SQL 查询不能正常工作

java - 定时器运行时处理

java - 使用 qJava 写入 KDB

java - 架构 'TEST' 不存在

encryption - 初始化向量(四)——更新频率