2009-08-11 3 views
12

Qual è l'approccio migliore per crittografare un file di database SQLite in .Net/C#? Sto usando il wrapper sqlite-dotnet2.Crittografa il database SQLite in C#

Esistono strumenti come SQLite Encryption Extension e SQLite Crypt, ma entrambi non sono gratuiti, mentre il mio progetto è in GPL.

L'approccio ingenuo che ho pensato di utilizzare è stato consentire a SQLite di gestire un file temporaneo, quindi di crittografarlo all'uscita del programma e sovrascrivere (zero-out) l'originale. Lo svantaggio ovvio è che se il programma si blocca (e mentre è in esecuzione), il DB di testo in chiaro è accessibile.

C'è un modo migliore per avvicinarsi a questo? Posso passare un flusso crittografato al wrapper (invece di usare SQLiteConnection.CreateFile)?

[modifica] Forse sto pensando troppo a questo. È sufficiente usare l'opzione Password nella stringa di connessione? Il file verrà crittografato correttamente in quel caso (o è una protezione più debole)?

+1

> Esistono strumenti come SQLite Encryption Extension e SQLite Crypt, ma entrambi non sono gratuiti, mentre il mio progetto è in GPL. Non abbiamo ancora provato a utilizzarlo con .NET, ma sono nel team di sviluppo di [SQLCipher] [1], che è fondamentalmente una versione gratuita e non ingombra di SQLite che fornisce una crittografia trasparente del database. Lo raccomanderei per l'utilizzo in applicazioni mobili e/o stand-alone in cui è preferibile un db incorporato. [1]:.? Http://github.com/sjlombardo/sqlcipher –

+0

... e la versione .NET di SQLCipher è ora anche un prodotto commerciale :( – Cocowalla

risposta

18

Si consiglia di utilizzare il wrapper System.Data.Sqlite, che include la crittografia. Funziona alla grande, è facile da usare ed è un'implementazione completa di ADO.Net. È possibile ottenere il wrapper da https://system.data.sqlite.org e lo sviluppatore descrive come utilizzare la crittografia su questo forum al numero: https://web.archive.org/web/20100207030625/http://sqlite.phxsoftware.com/forums/t/130.aspx. Suggerimento: basta impostare la proprietà della password. Descrive anche come fa la crittografia utilizzando l'API Microsoft Crypto altrove nel forum.

+1

I collegamenti sono rotti Potrebbe fornire al nuovo – Protocole

+1

Sembra che Robert Simpson abbia abbandonato il sito phxsoftware una volta che il controllo del software è stato trasferito su http://system.data.sqlite.org nel 2011. Non credo che le vecchie pagine del forum siano pubblicate altrove. –

+2

versione cache del sopra il collegamento http://web.archive.org/web/20130325100811/http://sqlite.phxsoftware.com/forums/t/130.aspx –

-1

Questo metodo non è specifico per SQLite di per sé ma è un suggerimento di crittografia di file generale.

(1) Utilizzare TrueCrypt (free/opensource) per creare un file wrapper crittografato. Questo file dovrebbe essere più grande della dimensione massima prevista del tuo database.

(2) Quando si monta questo file, questo apparirà come un disco rigido logico nel proprio computer.

(3) Conserva i tuoi database SQLite in questo disco logico.

Montare l'unità prima di accedere al database tramite odbc/jdbc o qualsiasi altro metodo.

Il vantaggio di ciò è: anche se qualcuno ha accesso alla password del database, non può accedere al file poiché è crittografato. Avranno bisogno della tua password TrueCrypt per aprirla.

+4

Questo è un suggerimento utile per un utente o un amministratore. non è così utile quando si include la funzionalità di crittografia in un programma. – dbkk

5

Vorrei provare http://code.google.com/p/csharp-sqlite/, è la riscrittura di SQLite 3.6.16 in C#, sotto Licenza MIT. Suppongo che sarà facile modificarlo.

EDIT: Come indicato nella nota che segue, si supportano anche sqlcipher crittografia

UPDATE: Poiché Google Code è andato sola lettura il progetto si è spostato il proprio sito web https://system.data.sqlite.org/index.html/doc/trunk/www/index.wiki

+1

C# -SQLite include il supporto integrato per r il pacchetto sqlcipher; Lo compili con SQLITE_HAS_CODEC e lo attivi con PRAGMA hexkey = "0x0102030405060708090a0b0c0d0e0f10"; – Noah