Aquí está el problema: En mi proyecto Qt4.6, utilizo una base de datos SQLite. Esta base de datos no debe estar desencriptada en mi disco duro. Así que quiero que en cada inicio de mi programa, se le pida al usuario que ingrese una contraseña para descifrar la base de datos. Por supuesto, la base de datos nunca debería aparecer "en claro" (no encriptada) en mi disco duro.
¿Hay alguna posibilidad de descifrar una base de datos SQLite "sobre la marcha" y leer y escribir datos? ¿Qué algoritmo es el mejor (quizás AES)?
Cuando no es posible (o muy lento), quizás sea mejor encriptar cada cadena en la base de datos y descifrarla cuando la contraseña sea correcta (para que un usuario pueda abrir la base de datos, pero no tiene idea de qué podrían hacer media)?Encriptar/Descifrar base de datos SQLite y usarlo "sobre la marcha"
Respuesta
No hay soporte integrado, por lo que se dice que usted tiene opciones.
1) Puede encriptar/desencriptar todas sus cadenas, pero esto es mucho trabajo, no es transparente y no le permitirá hacer cosas como buscar en la base de datos.
2) SQLiteCrypt y SQLCipher hagan lo que usted está buscando.
Puede usarlos casi completamente transparentes y, por lo general, se dice que tienen solo un 5% de gastos generales comparados sin cifrado.
Lo mejor que puedo pensar es usar FUSE - "filesystems in user-land" - disponible para Linux, Mac OS X y otros sistemas, o un sistema de archivos encriptado diferente. Esto hará que SQLite lo vea como desencriptado mientras está encriptado físicamente en el disco. Al jugar con los permisos, puede asegurarse de que las personas no puedan acceder al sistema de archivos no cifrado.
No estoy seguro de si SQLite tiene una forma de sobrepasar las rutinas de lectura/escritura de bajo nivel que le permitirán implementar el cifrado sobre la marcha sin juegos de sistema de archivos. Al menos nunca tuve que hacer eso. Es posible que desee buscar dicha solicitud de función y archivarla si no está en el rastreador de problemas de SQLite.
Sugeriría utilizar una biblioteca que hace esto por usted, en lugar de construir en su propia encriptación.
http://www.hwaci.com/sw/sqlite/see.html o http://sqlite-crypt.com/documentation.htm
usar su motor de búsqueda favorito para algunas alternativas.
Una opción adicional sería el códec de cifrado SQLite que viene con Botan 1.9.x (src/wrap/sqlite).
Esa opción le da la posibilidad de personalizar el tipo de cifrado en tiempo de compilación, incluido el cifrado y el modo.
Divulgación: contribuí con el códec a Botan.
- 1. ¿Cómo puedo crear una nueva base de datos SQLite, con todas las tablas, sobre la marcha?
- 2. Base de datos sobre la marcha con lenguajes de scripting
- 3. Java ArrayList y HashMap sobre la marcha
- 4. Actualización Colación de todos los campos en la base de datos sobre la marcha
- 5. Android ExpandableListView y base de datos SQLite
- 6. Perl: ¿cómo crear objetos sobre la marcha?
- 7. Declarar variable en sqlite y usarlo
- 8. interpolación de grandes conjuntos de datos sobre la marcha
- 9. Seguridad de la base de datos Sqlite
- 10. ¿Puedo encriptar la base de datos SQLite?
- 11. métodos Creación sobre la marcha
- 12. cómo reducir la base de datos sqlite?
- 13. base de datos SQLite Android local, bloqueo, y la versión
- 14. Cargando complementos Haskell sobre la marcha
- 15. Cargando jQuery sobre la marcha
- 16. Añadir colspan y rowspan en la mesa sobre la marcha
- 17. Agregar tablas y columnas en Hibernate sobre la marcha?
- 18. claves de diccionario Generación sobre la marcha
- 19. ¿Cómo podemos descargar la base de datos sqlite desde url y agregarla a nuestra aplicación como base de datos sqlite?
- 20. Actualización de la base de datos sqlite cuando la base de datos del servidor se actualiza
- 21. SQLite: ¿la forma más rápida de leer datos de la base de datos SQLite?
- 22. Archivos ZIP de PHP sobre la marcha
- 23. ¿Cómo nombrar variables sobre la marcha?
- 24. Cálculo de percentiles sobre la marcha
- 25. Convertir EPS a PDF sobre la marcha con pdflatex sobre la marcha
- 26. ¿Cómo agregar datos iniciales a la base de datos SQLite?
- 27. Creación de subdominios sobre la marcha
- 28. Creación de claves JSON sobre la marcha
- 29. Forma fácil de almacenar metadatos sobre la base de datos SQLite
- 30. ¿Puedo crear colas resque sobre la marcha?
pero cuando uso una API diferente, ya no tengo la "usabilidad" de Qt y SQLite, ¿verdad? – Berschi
@Berschi: Probablemente tendrías que reconstruir el componente sqlite en Qt pero proporcionan la fuente para necesidades como esta. Creo que intentar usar uno de estos componentes será tu mejor opción. –
Debería poder usar el controlador sqlite y compilarlo contra el sqllite proporcionado por SqlLitCrypt o SQLCipher. Probablemente podría incorporar parte de la facilidad de la contraseña en la cadena de conexión, o extender la clase de controlador y llamar al controlador directamente para las funciones extendidas –