Ecco il problema: Nel mio progetto Qt4.6, utilizzo un database SQLite. Questo database non dovrebbe essere non criptato sul mio hard disk. Quindi voglio che ad ogni avvio del mio programma venga chiesto all'utente di inserire una password per decrittografare il database. Ovviamente il database non dovrebbe mai apparire "in chiaro" (non crittografato) sul mio hard disk.
Quindi esiste la possibilità di decodificare un database SQLite "al volo" e leggere e scrivere dati? Quale algoritmo è qui il migliore (forse AES)?
Quando non è possibile (o molto lento), forse è meglio crittografare ogni stringa nel database e decrittografare la stringa quando la password è corretta (in modo che un utente possa aprire il database, ma non ha idea di cosa potrebbero fare tutti gli accessi significare)?Codifica/decodifica il database SQLite e usalo "al volo"
risposta
Non è presente un supporto integrato, in base al quale si dispone di opzioni.
1) È possibile crittografare/decrittografare tutte le stringhe da soli, ma è molto lavoro, non è trasparente e non consente di eseguire operazioni come la ricerca nel database.
2) SQLiteCrypt e SQLCipher fare ciò che stai cercando.
È possibile utilizzarli quasi completamente trasparenti e in genere si dice che abbiano solo circa il 5% di spese generali rispetto senza crittografia.
Il modo migliore a cui pensare è utilizzare FUSE - "filesystem in user-land" - disponibile per Linux, Mac OS X e altri sistemi o un diverso sistema di file crittografato. Questo renderà SQLite visibile come non criptato mentre viene fisicamente crittografato sul disco. Giocando con le autorizzazioni è possibile assicurarsi che le persone non possano accedere al file system non crittografato.
Non sono sicuro che SQLite sia in grado di scavalcare le routine di lettura/scrittura di basso livello che consentiranno di implementare la crittografia al volo senza giochi di filesystem. Almeno non ho mai avuto bisogno di farlo. Potresti voler cercare una richiesta di questa funzionalità e archiviarne una se non si trova nel tracker dei problemi di SQLite.
Suggerirei di usare una libreria che fa questo per voi, piuttosto che costruire nella vostra crittografia.
http://www.hwaci.com/sw/sqlite/see.html o http://sqlite-crypt.com/documentation.htm
utilizzare il motore di ricerca preferito per alcune alternative.
Un'opzione aggiuntiva sarebbe il codec di codifica SQLite fornito con Botan 1.9.x (src/wrap/sqlite).
Questa opzione consente di personalizzare il tipo di crittografia al momento della compilazione, inclusi il codice e la modalità.
Disclosure: Ho contribuito con il codec a Botan.
- 1. Database al volo con linguaggi di scripting
- 2. Come fa mongodb creare il database/raccolta al volo
- 3. Come posso creare un nuovo database SQLite, con tutte le tabelle, al volo?
- 4. sqlite - allegare il database
- 5. Sincronizzazione database SQLite dalla memoria al file
- 6. Android - Accesso al database online SQlite
- 7. Converti EPS in PDF al volo con pdflatex al volo
- 8. Attività e accesso in background al database SQLite
- 9. Database espandibile AndroidListView e SQLite
- 10. Creazione database SQLite e tabella
- 11. PHPExcel scrivere al volo?
- 12. Java ArrayList e HashMap al volo
- 13. Scarica il codice ed esegui al volo
- 14. Cambiare il modello di Auth al volo
- 15. primavera: aggiungi il contesto xml al volo?
- 16. Come svuotare il database SQLite?
- 17. Modifica il valore delle impostazioni al volo?
- 18. Scaricare il database SQLite da Internet e caricare nell'applicazione Android
- 19. Flushing e database SQLite su Android
- 20. Puoi cambiare templateUrl al volo?
- 21. aggiunta @ font-face al volo
- 22. creazione di metodi al volo
- 23. Calcolo dei percentili al volo
- 24. Creazione di sottodomini al volo
- 25. Posso cambiare SparkContext.appName al volo?
- 26. Modifica campi serializzatore al volo
- 27. Perché utilizzare il database sqlite in Android?
- 28. Crittografa il database SQLite in C#
- 29. Convalidare EmberJS TextField al volo?
- 30. Come proteggere il database SQLite dalla corruzione
ma quando uso un'API diversa, non ho più "usabilità" di Qt e SQLite, giusto? – Berschi
@Berschi: Probabilmente dovresti ricostruire il componente sqlite in Qt ma forniscono l'origine per esigenze come questa. Penso che provare a utilizzare uno di questi componenti sia la soluzione migliore. –
Dovresti essere in grado di utilizzare il driver sqllite e compilarlo rispetto al sqllite fornito da SqlLitCrypt o SQLCipher. Probabilmente potresti incorporare parte della funzionalità della password nella stringa di connessione, oppure estendere la classe del driver e chiamare direttamente il driver per le funzioni estese –