2009-08-11 39 views
12

¿Cuál es el mejor enfoque para cifrar un archivo de base de datos SQLite en .Net/C#? Estoy usando el contenedor sqlite-dotnet2.Cifrar base de datos SQLite en C#

Existen herramientas como SQLite Encryption Extension y SQLite Crypt, pero ambas no son gratuitas, mientras que mi proyecto está bajo GPL.

El enfoque ingenuo que pensé utilizar fue dejar SQLite manejar un archivo temporal, luego cifrarlo en la salida del programa, y ​​sobrescribir (cero) el original. El inconveniente obvio es que si el programa falla (y mientras se está ejecutando), se puede acceder al DB de texto sin formato.

¿Hay una mejor manera de abordar esto? ¿Puedo pasar una secuencia encriptada al wrapper (en lugar de usar SQLiteConnection.CreateFile)?

[edit] Tal vez estoy pensando demasiado en esto. ¿Es suficiente usar la opción Contraseña en la cadena de conexión? ¿Sería el archivo cifrado correctamente en ese caso (o es una protección más débil)?

+1

> Hay herramientas como SQLite Encryption Extension y SQLite Crypt, pero ambas no son gratuitas, mientras que mi proyecto está bajo GPL. No hemos intentado utilizarlo con .NET todavía, pero estoy en el equipo de desarrollo de [SQLCipher] [1], que es básicamente una versión gratuita y libre de SQLite que proporciona cifrado de base de datos transparente. Lo recomendaría para su uso en configuraciones de aplicaciones móviles y/o autónomas, donde es deseable una base de datos incorporada. [1]:.? Http://github.com/sjlombardo/sqlcipher –

+0

... y la versión .NET de SQLCipher también es ahora un producto comercial :( – Cocowalla

Respuesta

18

Recomiendo usar el contenedor System.Data.Sqlite, que incluye el cifrado. Funciona de maravilla, es fácil de usar y es una implementación completa de ADO.Net. Puede obtener el contenedor desde https://system.data.sqlite.org, y el desarrollador describe cómo usar el cifrado en este foro en: https://web.archive.org/web/20100207030625/http://sqlite.phxsoftware.com/forums/t/130.aspx. Sugerencia: usted acaba de establecer la propiedad de la contraseña. También describe cómo hace la encriptación usando la API de Microsoft Crypto en otro lugar del foro.

+1

Los enlaces se rompen Podría dar el nuevo – Protocole

+1

Parece que Robert Simpson abandonó el sitio de phxsoftware una vez que el control del software se transfirió a http://system.data.sqlite.org en 2011. No creo que las páginas antiguas del foro se publiquen en otro sitio. –

+2

versión en caché del Enlace anterior http://web.archive.org/web/20130325100811/http://sqlite.phxsoftware.com/forums/t/130.aspx –

-1

Este método no es específico de SQLite per se, pero es una sugerencia general de encriptación de archivos.

(1) Use TrueCrypt (free/opensource) para crear un archivo contenedor encriptado. Este archivo debe ser más grande que el tamaño máximo esperado de su base de datos.

(2) Cuando monte este archivo, aparecerá como un disco duro lógico en su máquina.

(3) Mantenga sus bases de datos sqlite en este disco duro lógico.

Monte la unidad antes de acceder a su base de datos a través de odbc/jdbc o de cualquier otro método.

La ventaja de hacer esto es: incluso si alguien tiene acceso a la contraseña de su base de datos, no puede acceder al archivo ya que está encriptada. Necesitarán su contraseña de Truecrypt para abrirla.

+4

Esta es una sugerencia útil para un usuario o administrador. no es tan útil cuando se incluye la función de encriptación en un programa. – dbkk

5

Probaría http://code.google.com/p/csharp-sqlite/, es la reescritura de SQLite 3.6.16 en C#, bajo licencia MIT. Supongo que será fácil modificarlo.

EDIT: Como se menciona en la nota a continuación, que también apoyan sqlcipher cifrado

ACTUALIZACIÓN: Desde Google Code se fue de sólo lectura del proyecto se ha trasladado a su propio sitio web https://system.data.sqlite.org/index.html/doc/trunk/www/index.wiki

+1

C# -SQLite incluye soporte integrado para r el paquete sqlcipher; Compila con SQLITE_HAS_CODEC y lo activa con PRAGMA hexkey = "0x0102030405060708090a0b0c0d0e0f10"; – Noah

Cuestiones relacionadas