Лучший способ, о котором я могу думать, - это использовать FUSE - «файловые системы в пользовательской среде» - доступные для Linux, Mac OS X и других систем, или другую зашифрованную файловую систему. Это заставит SQLite считать его незашифрованным при физическом шифровании на диске. Играя с разрешениями, вы можете быть уверены, что люди не смогут получить доступ к незашифрованной файловой системе.
Я не уверен, что у SQLite есть способ переопределить низкоуровневые процедуры чтения / записи, которые позволят вам реализовать шифрование на лету без игр с файловой системой. По крайней мере, мне никогда не нужно было этого делать. Возможно, вы захотите найти такой запрос и отправить его, если его нет в трекере SQLite.