Ho un db sqlite3 che inserisco/seleziono da in python. L'app funziona benissimo ma voglio modificarlo in modo che nessuno possa leggere dal DB senza una password. Come posso farlo in Python? nota non ho idea da dove iniziare.File crittografato o db in python
risposta
Un elenco di Python encryption examples.
I database SQLite sono piuttosto leggibili dall'uomo e non sono presenti crittografi incorporati.
Siete preoccupati che qualcuno acceda e leggendo direttamente i file del database o accedano tramite il vostro programma?
Sto assumendo il primo, perché quest'ultimo non è realmente correlato al database: è la sicurezza della tua applicazione che stai chiedendo.
Alcune opzioni vengono in mente:
- Proteggere il db con le autorizzazioni del file system, piuttosto che la crittografia. Non hai menzionato quale sia il tuo ambiente, quindi non posso dire se questo sia praticabile per te o meno, ma è probabilmente il modo più semplice e affidabile, dato che non puoi provare a decodificare ciò che non puoi leggere.
- Encrypt in Python prima di scrivere e decrittografare in Python dopo la lettura. Abbastanza semplice, ma si perde la maggior parte della potenza delle operazioni di corrispondenza basate su set di SQL.
- Passare a un altro database; l'autenticazione utente e le autorizzazioni sono caratteristiche standard della maggior parte dei database multiutente. Quando ti trovi di fronte ai limiti di uno strumento, potrebbe essere più semplice dare un'occhiata ad altri strumenti piuttosto che hackerare nuove funzionalità nello strumento corrente.
Ho la stessa domanda, eccetto che non posso usare altri database perché sqlite è leggero per un'applicazione desktop che sto cercando di scrivere (un software di registrazione privato) –
È possibile utilizzare SQLCipher.
Open Source di crittografia completo del database SQLite per
SQLCipher è un'estensione SQLite che fornisce trasparente a 256 bit AES di file di database. Le pagine vengono crittografate prima di essere scritte su disco e decifrate quando vengono rilette. Grazie all'ingombro ridotto e alle grandi prestazioni, è ideale per proteggere i database delle applicazioni incorporate e si adatta perfettamente allo sviluppo mobile.
- Blazing prestazioni veloci con un minimo di 5-15% overhead per crittografia su molte operazioni
- 100% dei dati nel file di database viene crittografato utilizza una buona sicurezza pratiche (modalità CBC, chiave di derivazione)
- Zero-configurazione e livello di applicazione di crittografia piattaforma ampia
- supporto: funziona con C/C++, Obj-C, QT, Win32/.NET, Java, Python, Ruby, ecc su Windows, Linux, iPhone/iOS ...
come esattamente si arriva a lavoro da Python? – Michael
Ho avuto lo stesso problema. La mia applicazione potrebbe avere più istanze in esecuzione contemporaneamente. Per questo motivo, non posso solo crittografare il file sqlite db e averlo fatto. Inoltre, non credo che la crittografia dei dati in Python sia una buona idea, dal momento che non puoi effettuare alcuna seria manipolazione dei dati nel database con esso in questo stato.
Con questi vincoli in mente, ho fornito con le seguenti due soluzioni:
1) Utilizzare lo SQLCipher prima menzionato. I problemi che vedo qui, sono che dovrò scrivere i miei legami per Python e compilarlo da solo (o pagare la tassa). Potrei farlo in entrambi i casi in quanto sarebbe un'ottima soluzione per altri sviluppatori Python. Se avrò successo, rilascerò la soluzione.
2) Se l'opzione 1 è troppo difficile per me, o troppo tempo, userò questo metodo. Questo metodo non è sicuro. Userò pycrypto per crittografare il file del database. Implementerò un "server" SQL che decodificherà il file del database, quindi gestirà le richieste da vari client. Ogni volta che non ci sono richieste in sospeso, verrà reencrypt il database. Questo sarà più lento, soprattutto, e lascerà il database in stati temporali decrittografati.
Spero che queste idee aiutino il prossimo.
EDIT 1/13/2013
ho rinunciato a SQLCipher perché non riuscivo a farlo compilare, e il codice di base sta cercando di usare OpenSSL, che mentre una libreria di suoni, è piuttosto massiccio di una base di codice per AES 128 semplice.
Ho trovato un'altra opzione wxSQLite3 e ho scoperto come separare solo il pezzo di crittografia SQLite: https://github.com/shenghe/FreeSQLiteEncryption. Sono stato in grado di ottenere questo per compilare e lavorare (con l'ultima versione di SQLite3). wxSQLite3 supporta anche AES 256 che è davvero interessante. Il mio prossimo passo sarà tentare di compilare pysqlite (che è la libreria sqlite che viene creata in python) con sqlite3.dll modificato. Se funziona, ottimizzerò pysqlite per supportare il pezzo esteso di crittografia del sqlite3.dll di wxSQLite3. In ogni caso, cercherò di aggiornare questo thread con i miei risultati e, in caso di successo, pubblicherò la base di codice finale, con istruzioni di compilazione, su Github.
Come suggerisce Frontware, è possibile utilizzare sqlcipher.
pysqlcipher Il pacchetto python può semplificare l'utilizzo poiché utilizza la combinazione di codice sqlcipher per compilare l'estensione.
Dovrebbe essere solo questione di usare pysqlcipher come si userebbe regolarmente sqlite.dbapi2, semplicemente impostando la corretta direttiva crypto.
- 1. visualizzazione file crittografato utilizzando il framework QuickLook o UiDocumentInteractionController
- 2. file casuale SQLite è crittografato o non è un database
- 3. Codice Python per creare un file zip crittografato con password?
- 4. Accesso al file crittografato pgp in Ruby
- 5. Android: Come decomprimere un file zip crittografato
- 6. Creazione di un file di registro crittografato
- 7. JavaScript crittografato?
- 8. convertire python sqlite db in hdf5
- 9. Impossibile decifrare il file crittografato in Android lollipop
- 10. nosql db per python
- 11. Come verificare se il file è crittografato utilizzando AES (Rijndael)
- 12. MongoDB - Memorizza i file nel DB o nella memoria esterna?
- 13. Memorizzazione di grandi quantità di dati: DB o File System?
- 14. Classe DB-Connections come Singleton in Python
- 15. Mongo DB $ o query in PHP
- 16. Repository Subversion crittografato
- 17. Ricerca nell'ingresso crittografato AES-CTR
- 18. App.config - errore di sezione crittografato:
- 19. Carrello spesa, sessione o DB?
- 20. Riproduci video crittografato con AVPlayer
- 21. Come decrittografare un valore MCRYPT_RIJNDAEL_256 crittografato in C#, crittografato da mcrypt in PHP?
- 22. Mongoose.js: rimuovere raccolta o DB
- 23. Enum nel DB o NO Enums nel DB
- 24. Come decifrare il file crittografato PGP con Ruby gpgme
- 25. Inserire i file `tsv` in postgresql db
- 26. mysqldump con db in un file separato
- 27. Esegui istruzioni DB dal file
- 28. NSData crittografato su NSString in obj-c?
- 29. Navigazione in file o directory Finestra di dialogo in Python
- 30. Quale cifra viene utilizzata su NFS crittografato?
Si sta utilizzando una libreria speciale – xster