Estoy aprendiendo a usar SQLite y tenía curiosidad si eso es posible:
Cifrado del archivo de base de datos?
¿La contraseña protege la apertura de la base de datos?
PD. Sé que existe esta "Extensión de cifrado SQLite (SEE)", pero de acuerdo con la documentación, "El SEE es software con licencia ..." y "El costo de una licencia de código fuente perpetuo para SEE es de US $ 2000".
Respuestas:
SQLite tiene ganchos integrados para el cifrado que no se usan en la distribución normal, pero aquí hay algunas implementaciones que conozco:
SEE y SQLiteCrypt requieren la compra de una licencia.
Divulgación: creé botansqlite3.
fuente
Puede proteger con contraseña SQLite3 DB. Por primera vez antes de realizar cualquier operación, configure la contraseña de la siguiente manera.
entonces la próxima vez puedes acceder como
Esto no permitirá que ningún editor de GUI vea sus datos. Más adelante, si desea cambiar la contraseña, use
conn.ChangePassword("new_password");
Para restablecer o eliminar la contraseña, useconn.ChangePassword(String.Empty);
fuente
ChangePassword
utilicé? AES 128? RSA ..?SetPassword
método (en este momento) parece básicamente inútil. La única forma en que pude hacer que laSystem.Data.SQLite
biblioteca aplicara correctamente la contraseña fue usando elChangePassword
método. UtilizandoSetPassword
( antes de llamar alOpen
método, como aparentemente es requerido por la biblioteca), todavía podía abrir y editar la base de datos en SQLiteStudio sin ninguna contraseña. No fue hasta que usé elChangePassword
método ( después de llamar alOpen
método) que la aplicación de contraseña realmente "se atascó".La biblioteca .net System.Data.SQLite también proporciona cifrado.
fuente
Puede obtener
sqlite3.dll
archivos con soporte de cifrado en http://system.data.sqlite.org/ .1 - Vaya a http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki y descargue uno de los paquetes. La versión .NET es irrelevante aquí.
2 - Extraer
SQLite.Interop.dll
del paquete y renombrarlo asqlite3.dll
. Esta DLL admite el cifrado mediante contraseñas de texto sin formato o claves de cifrado.El archivo mencionado es nativo y NO requiere .NET framework. Es posible que necesite Visual C ++ Runtime dependiendo del paquete que haya descargado.
ACTUALIZAR
Este es el paquete que he descargado para el desarrollo de 32 bits: http://system.data.sqlite.org/blobs/1.0.94.0/sqlite-netFx40-static-binary-Win32-2010-1.0.94.0.zip
fuente
.lib
que pudiera incrustar en mi ejecutable. No podría tener ningún dlls.lib
ydll
archivo.Tenga en cuenta que lo siguiente no pretende ser un sustituto de una solución de seguridad adecuada.
Después de jugar con esto durante cuatro días, armé una solución usando solo el paquete de código abierto System.Data.SQLite de NuGet. No sé cuánta protección proporciona esto. Solo lo estoy usando para mi propio curso de estudio. Esto creará la base de datos, la encriptará, creará una tabla y agregará datos.
Opcionalmente, puede eliminarlo
conn.SetPassword(passwordBytes);
y reemplazarlo con elconn.ChangePassword("password");
que debe colocarse después enconn.Open();
lugar de antes. Entonces no necesitará el método GetBytes.Para descifrar, solo es cuestión de poner la contraseña en su cadena de conexión antes de que se abra la llamada.
fuente
"I think I saw 128 bit somewhere"
- esta es una muy mala declaración si planea lidiar con el cifrado. La regla general es que nunca lo haces tú mismo si no lo entiendes. De lo contrario, sería mejor no usarlo en absoluto.Siempre puede cifrar datos en el lado del cliente. Tenga en cuenta que no todos los datos deben cifrarse porque tienen un problema de rendimiento.
fuente
Pues
SEE
es caro. Sin embargo,SQLite
tiene una interfaz incorporada para el cifrado (Pager). Esto significa que, además del código existente, uno puede desarrollar fácilmente algún mecanismo de cifrado, no es necesarioAES
. Cualquier cosa en realidad. Por favor, vea mi publicación aquí: https://stackoverflow.com/a/49161716/9418360Debe definir SQLITE_HAS_CODEC = 1 para habilitar el cifrado de buscapersonas. Código de muestra a continuación (
SQLite
fuente original ):Existe una versión comercial
C language
para elSQLite
cifrado con AES256; también puede funcionarPHP
, pero debe compilarsePHP
ySQLite
ampliarse. Des / encripta elSQLite
archivo de la base de datos sobre la marcha, el contenido del archivo siempre está encriptado. Muy útil.http://www.iqx7.com/products/sqlite-encryption
fuente
Puede usar las rutinas de creación de funciones de SQLite ( manual de PHP ):
Al insertar datos, puede usar la función de cifrado directamente e INSERTAR los datos cifrados o puede usar la función personalizada y pasar datos no cifrados:
Al recuperar datos, también puede usar la funcionalidad de búsqueda SQL:
fuente