Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Encrypt/Decrypt SQLite-database and use it "on the fly"

Here's the thing: In my Qt4.6-Project, I use a SQLite-Database. This database shouldn't be unencrypted on my harddrive. So I want, that on every start of my program, the user gets asked to enter a password to decrypt the database. Of course the database never should appear "in clear" (not encrypted) on my harddrive.
So is there any possibility to decrypt a SQLite-database "on the fly" and read and write data? What algorithm is here the best (maybe AES)?
When it's not possible (or very slow), maybe it's better to encrypt every string in the database and decrypt the string when the password was right (so that a user could open the database, but has no clue what all the entrys could mean)?

like image 983
Berschi Avatar asked Apr 03 '10 15:04

Berschi


2 Answers

An additional option would be the SQLite encryption codec that comes with Botan 1.9.x (src/wrap/sqlite).

That option gives you the ability to customize the encryption type at compile time, including the cipher and mode.

Disclosure: I contributed the codec to Botan.

like image 161
OliJG Avatar answered Sep 28 '22 22:09

OliJG


There is no built in support, that being said you do have options.

1) You can encrypt/decrypt all of your strings yourselves, but this is a lot of work, is not transparent, and won't allow you to do things like searching in the database.

2) SQLiteCrypt and SQLCipher do what you're looking for.

You can use them almost entirely transparent and typically they are said to have only about 5% overhead compared without encryption.

like image 24
Brian R. Bondy Avatar answered Sep 28 '22 23:09

Brian R. Bondy