3

暗号化された 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)
4

1 に答える 1

5

jackcess-encrypt はbouncycastle 1.52 とソース互換性がありますが、バイナリ互換性はありません。詳細については、この機能リクエストを参照してください。基本的に (今のところ)、bouncycastle 1.50 以下のバージョンを使用する必要があります。

更新: jackcess-encrypt の 2.1.1 リリースの時点で、古いバージョン (1.52 より前) と新しいバージョン (1.52+) の両方の bouncycastle が正しく動作するはずです。

于 2015-09-22T01:16:24.073 に答える