0

次の方法を使用して、Linux コマンド ラインから SQLite データベースを暗号化しました。

$ ./sqlcipher plaintext.db
sqlite> ATTACH DATABASE 'encrypted.db' AS encrypted KEY 'MyPass123';
sqlite> SELECT sqlcipher_export('encrypted');
sqlite> DETACH DATABASE encrypted;

暗号化されたデータベースを Android プロジェクトの assets フォルダーに配置し、次の方法でコピーしました。

InputStream mInput = mContext.getAssets().open(DB_NAME);
String outFileName = DB_PATH + DB_NAME;
OutputStream mOutput = new FileOutputStream(outFileName);
byte[] mBuffer = new byte[1024];
int mLength;
while ((mLength = mInput.read(mBuffer)) > 0) {
    mOutput.write(mBuffer, 0, mLength);
}
mOutput.flush();
mOutput.close();
mInput.close();

しかし、このデータベースを開こうとすると、「ファイルが暗号化されているか、データベースではありません」というエラーが表示されます。コマンドラインで暗号化するために使用したのと同じキーを使用して開きます。

このようにデータベースを開きます。

String mPath = DB_PATH + DB_NAME;   

mDataBase = SQLiteDatabase.openDatabase(mPath, "MyPass123", null, SQLiteDatabase.CREATE_IF_NECESSARY);

何か不足していますか?

4

0 に答える 0