文件已加密或不是数据库:Android中的SQLCipher

时间:2016-03-27 19:57:50

标签: android sqlite sqlcipher sqlcipher-android

我使用以下方法从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);

我错过了什么吗?

0 个答案:

没有答案