【发布时间】:2015-12-16 08:44:09
【问题描述】:
我需要从加密的 Access 97 数据库中读取数据并试用 Jackcess 和 UCanAccess。
我正在使用来自 bouncycastle.org 的 jackcess-2.1.2.jar、jackcess-encrypt-2.1.0 和 bcprov-jdk15on-152.jar
由于 UCanAccess 在内部使用 Jackcess,我在所有其他尝试中都遇到了同样的错误。
import com.healthmarketscience.jackcess.CryptCodecProvider;
import com.healthmarketscience.jackcess.Database;
import com.healthmarketscience.jackcess.DatabaseBuilder;
import java.io.File;
File fi = new File("test/access/data.mdb");
CryptCodecProvider cryptProvider = new CryptCodecProvider();
cryptProvider.setPassword("mypassword");
DatabaseBuilder dbb = new DatabaseBuilder(fi);
dbb.setFileFormat(Database.FileFormat.V1997);
dbb.setAutoSync(false);
dbb.setCodecProvider(cryptProvider);
dbb.setReadOnly(true);
Database dbc = dbb.open();
最后一行调用了一个错误,这里是堆栈跟踪:
Exception in thread "main" java.lang.NoSuchMethodError: org.bouncycastle.crypto.StreamCipher.processBytes([BII[BI)V
at com.healthmarketscience.jackcess.impl.BaseCryptCodecHandler.streamDecrypt(BaseCryptCodecHandler.java:91)
at com.healthmarketscience.jackcess.impl.BaseJetCryptCodecHandler.decodePage(BaseJetCryptCodecHandler.java:62)
at com.healthmarketscience.jackcess.impl.PageChannel.readPage(PageChannel.java:224)
at com.healthmarketscience.jackcess.impl.UsageMap.read(UsageMap.java:130)
at com.healthmarketscience.jackcess.impl.PageChannel.initialize(PageChannel.java:117)
at com.healthmarketscience.jackcess.impl.DatabaseImpl.<init>(DatabaseImpl.java:516)
at com.healthmarketscience.jackcess.impl.DatabaseImpl.open(DatabaseImpl.java:389)
at com.healthmarketscience.jackcess.DatabaseBuilder.open(DatabaseBuilder.java:248)
at ACCESS.ACCESSTest.main(ACCESSTest.java:84)
【问题讨论】:
-
仔细检查库版本是否兼容
-
我正在使用 Java 版本 1.8.0_25 和用于 JDK 1.5 到 1.8 的最新 Bouncy Castle 库,但也尝试了用于 JDK 1.4 的那些。在 Jackcess 主页上只有此信息与 Bouncy Castle 的链接:“加密支持需要一个额外的库 (Bouncy Castle)。将此支持与主要的 Jackcess 库分开允许用户避免包含不必要的库。”我无法获得有关依赖项或所需/兼容版本的任何信息。
-
澄清一下:您说的是受数据库密码保护的 Access 97 文件。换句话说,如果您在 Access 中打开数据库,系统只会提示您输入密码,而不是用户名和密码。对吗?
-
密码存储在用户/组权限中。如果我使用 msaccess/user 打开文件,我只需要输入用户名并且必须将密码留空。
标签: java encryption ucanaccess jackcess ms-access-97