2011-01-05 31 views
5

¿Cómo puedo crear una base de datos SQLite encriptada que realmente se mantenga encriptada o que pueda abrir después?SQLite - Creación de bases de datos cifradas. Cómo...?

Utilicé SQLite2009 Pro Enterprise Manager que "puede" crear bases de datos cifradas, pero después de escribir la clave de cifrado ya no se pueden abrir.

Utilicé SQLiteManager de SQLabs para crear una base de datos cifrada y mientras esta se puede abrir después, esto se puede hacer desde cualquier herramienta de gestión SQLite o código sin necesidad de la clave que ingresé.

Entonces, ¿cómo diablos puede crear una base de datos SQLite encriptada, por favor?

Planeo usar la base de datos en una aplicación Adobe Flex.

Gracias.

+1

¿SQLite2009 es el producto vendido por la compañía que escribió SQLite? Porque sabía que tenían uno. Y, si eso no funcionaba, me pondría en contacto con ellos sobre el problema en lugar de volver a empezar. –

+0

No estoy seguro, parece haber sido escrito por alguien llamado Osen Kusnadi (no buscó su nombre). Pero no me sorprendería, siempre parece estar entre las primeras recomendaciones en el sitio sqlite.org. Probé esa aplicación en particular desde 2010 hasta hoy y esa cosa de cifrado nunca funcionó. – Francisc

Respuesta

4

SQLite admite la integración del cifrado, pero la distribución predeterminada de SQLite de código abierto no es compatible con el cifrado. Las versiones encriptadas de SQLite solo serán portátiles entre diferentes clientes o herramientas si todas usan la misma extensión de cifrado.

Los desarrolladores de SQLite distribuyen una versión comercial de SQLite que admite el cifrado de forma transparente. Cuando este módulo se utiliza para el cifrado, el cifrado funciona en todas las plataformas y cada byte escrito en el archivo está encriptado. No hay nada en un archivo SQLite encriptado almacenado en el disco para indicar que es una base de datos SQLite. Muchas herramientas respaldan esta implementación permitiéndole incluir el archivo sqlite.dll comercial en lugar del de código abierto.

También hay extensiones de terceros que admiten el cifrado. Por ejemplo, System.Data.SQLite admite cifrado, pero utiliza bibliotecas .NET para hacerlo y, por lo tanto, un System.Data.SQLite encriptado solo puede leerlo otro cliente que también use System.Data.SQLite (esto es a propósito, fuera de deferencia a los desarrolladores principales de SQLite y su producto comercial).

Adobe AIR 1.5 admite el cifrado. Aunque no estoy seguro de qué mecanismo se usa, busqué y no pude encontrar la respuesta. Es posible que una base de datos cifrada con AIR solo se pueda leer con AIR. No sé definitivamente de ninguna manera. Sin embargo, aquí es un buen punto de partida para aprender sobre el trabajo con bases de datos cifrados se AIRE:

http://probertson.com/articles/2008/11/18/air-1_5-encrypted-sqlite-database-how-to/

+0

Muchas gracias, Samuel. No tenía idea de cómo funcionaban las cosas cuando se trataba de cifrar bases de datos SQLite. Sé que AIR lo apoya, pero pensó que era algo "universal". Por curiosidad, ¿puede una base de datos que se creó no encriptada hacerse luego, cuando ya tiene todo tipo de datos? – Francisc

+1

@Francisc, no, una base de datos no se puede convertir de encriptada a no encriptada. Sin embargo, puede conectarse a una base de datos, volcarla y luego conectarse a una base de datos en blanco e importar el volcado anterior. A través de ese mecanismo puede convertir efectivamente de cifrado a no cifrado, pero es indirecto. –

+0

Dijiste "de encriptado a no encriptado", ¿lo dijiste al revés? Gracias. – Francisc

3

Re: cifrar una base de datos existente

"Por curiosidad, ¿puede una base de datos que no fue creada cifrada ¿Lo harás después, cuando ya tenga todo tipo de datos?

No puede encriptar una base de datos sin encriptar directamente. Puede cambiar la clave de cifrado de una base de datos utilizando el método SQLConnection.reencrypt(), pero sólo funciona en las bases de datos cifrados ya-:

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/data/SQLConnection.html#reencrypt()

Sin embargo, como una solución alternativa que puede abrir varias bases de datos dentro de una sola SQLConnection y puede copiar datos y estructura de uno a otro.De hecho, he escrito una clase de utilidad que utiliza esa técnica que le permite cifrar un db sin cifrar:

https://github.com/probertson/air-sqlite/blob/DB-copy-dev/src/com/probertson/data/DBCopier.as

+0

Excelente respuesta, me gustaría poder marcar 2 respuestas correctas. Gracias. – Francisc

+0

Si tiene el código fuente de la extensión de cifrado, puede hacerlo. SQLCipher ofrece dicho código fuente. Lo mismo se puede hacer para System.Data.sqlite. Es realmente fácil. –

Cuestiones relacionadas