我使用以下方式从 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);
我错过了什么吗?