encrypt sqlite database Android:

12,943

Step #0: Add the code to your UI to prompt the user to enter a passphrase.

Step #1: Download the SQLCipher for Android ZIP file.

Step #2: UnZIP the ZIP file and navigate to the directory that has an assets/ and a libs/ folder.

Step #3: Copy the contents of the assets/ directory into your project's assets/ directory.

Step #4: Copy the contents of the libs/ directory into your project's libs/ directory. Gradle/Android Studio users will also need to add a line to the top-level dependencies closure loading up the contents of libs/, if you do not have one already.

Step #5: Replace all relevant android.database.* and android.database.sqlite.* imports with their SQLCipher for Android equivalents. If you are using an IDE that can help you resolve missing imports (e.g., Ctrl-Shift-O in Eclipse), the easiest thing to do is to get rid of all existing android.database.* and android.database.sqlite.* imports and let the IDE help resolve them. Choose the net.sqlcipher imports when given the choice.

Step #6: You will now have compiler errors on a few methods where you open a database (e.g., getReadableDatabase() on SQLiteOpenHelper), where you now need to pass in the passphrase you collected from the user in Step #0.

This will work for new apps starting up with new databases. There is additional work involved to upgrade an existing app with existing users, if you want to allow those users to switch to an encrypted database.

Share:
12,943
Amsheer
Author by

Amsheer

Updated on June 19, 2022

Comments

  • Amsheer
    Amsheer almost 2 years

    Hi in my running app i already have an existing sqlite database. And now the problem is anybody can pull the sqlite database from device and can be use it. Now i need to encrypt the sqlite file. I found that SQLCipher is used to encrypt the sqlite database. But the real problem is i don't have any idea with SQLCipher and don't know how it works. Try to use different projects. Nothing help. Please anyone tell me how to encrypt my sqlite database.

    Thanks in advance.

  • Amsheer
    Amsheer almost 10 years
    Thanks it works. Now i've an another issue i need to encrypt the old sqlite database to db using SQLCipher how to do it? I try something that is from sqlcipher.net/sqlcipher-api (Example 1). I don't know how o do that. Please help me.
  • CommonsWare
    CommonsWare almost 10 years
    @Amsheer: Please ask a separate Stack Overflow question for that.
  • Aritra Roy
    Aritra Roy about 9 years
    @CommonsWare This is a perfect tutorial. How can I get SQLCIpher working on an already existing unencrypted database? What should be the best approach?
  • CommonsWare
    CommonsWare about 9 years
    @Aritra: To encrypt an existing database, use the encrypt() method from this source file. If you have additional questions in this area, please ask a fresh Stack Overflow question.
  • Aritra Roy
    Aritra Roy about 9 years
    @CommonsWare Thanks. Here is a new detailed question of my problems, stackoverflow.com/questions/29860873/… It would be awesome if you can help me on it.
  • Adolf Dsilva
    Adolf Dsilva almost 9 years
    Dude @CommonsWare don't forget to add SQLiteDatabase.loadLibs(this);
  • A-Sharabiani
    A-Sharabiani over 7 years
    Downloaded the zip file, there is no assets/ nor lib/ folders.
  • CommonsWare
    CommonsWare over 7 years
    @AliSharabiani: I don't know if they distribute the library that way anymore. It ships as an AAR for use with Gradle and Android Studio.