sqlcipherのドキュメントに記載されている次の方法を使用して、既存のsqliteデータベースを暗号化しました
$ ./sqlite3 plaintext.db
sqlite> ATTACH DATABASE 'encrypted.db' AS encrypted KEY 'testkey';
sqlite> SELECT sqlcipher_export('encrypted');
sqlite> DETACH DATABASE encrypted;
これは機能し、元のデータベースと同等のメモリサイズの暗号化されたデータベースを生成します。次に、Androidアプリケーションのデータベースにアクセスしようとしました。
SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(myDatabasePath、 "testkey"、null);
dbインスタンスでクエリを実行すると、データベースに既存のテーブルがないことがわかります。新しいテーブルを作成したり、行を追加して読み取ったりすることはできますが、古い既存のテーブルが表示されません。インポートの変更に関するsqlcipherドキュメントに記載されているガイドラインに注意深く従っています。