[Esto es una traducción del post original.]
El motor nativo de SQLite incluido en el SO no soporta cifrado. SQLCipher es un proyecto de código abierto que extiende SQLite y añade cifrado completo de la base de datos.
El objeto SQLCipher en B4A es un subtipo especial de objeto de SQL Server. Casi no hay necesidad de modificar ningún código a fin de pasar de SQL normal a SQLCipher.
SQLCipher depende de varios recursos nativos que están empaquetados en un archivo llamado sqlitecipher_native.zip. El tamaño del archivo es de 3MB.
La primera vez que el programa se ejecuta después de la instalación es necesario descomprimir el archivo descargado y copiar los recursos a la carpeta interna.
En los dispositivos más lentos la acción de copia puede llevar mucho tiempo.
Se recomienda inicializar el objeto con un código como éste:
Solo es lento la primera vez que la aplicación se ejecuta después de la instalación.
Preferentemente es mejor utilizar un dispositivo real en el desarrollo ya que el emulador es demasiado lento para manejar los recursos nativos.
La única diferencia entre la API SQL y la API SQLCipher es el método Initialize.
SQLCipher.Initialize espera dos valores adicionales: Password y NativeLibsFolder.
Password es la contraseña de la base de datos. Puedes pasarle una cadena de texto vacía si no hay contraseña. Ten en cuenta que no es posible cambiar la contraseña (o quitarla) de una una base de datos existente.
NativeLibsFolder es la carpeta donde se encuentra sqlitecipher_native.zip. Normalmente ese fichero se añadiría a la pestaña Files del editor y a la variable se le daría el valor de File.DirAssets. Otra opción es que, durante el desarrollo, a fin de hacer más rápido el proceso de instalación, lo copies manualmente a la tarjeta de almacenamiento y a la variable le des el valor de File.DirRootExternal (asegúrate en ese caso de quitarlo de la pestaña y borrarlo de la carpeta Files).
Cambios en el código requeridos para convertir de SQL a SQLCipher
- Declarar el objecto SQL como SQLCipher.
- Cambiar el código de inicialización a:
Ten en cuenta que no hay necesidad de cambiar nada en el módulo DBUtils
La librería puede ser descargada de aquí:
http://www.b4x.com/android/files/SQLCipher.zip
Instrucciones de instalación:
- Descomprimir el archivo.
- Copiar todos los archivos de InternalLibrariesFolder a la carpeta de librerías internas.
- Añade sqlcipher_native.zip de la carpeta NativeResources a tu proyecto como se ha descrito previamente.
- Deberías hacer referencia tanto a SQL como a SQLCipher en tu proyecto.
El motor nativo de SQLite incluido en el SO no soporta cifrado. SQLCipher es un proyecto de código abierto que extiende SQLite y añade cifrado completo de la base de datos.
El objeto SQLCipher en B4A es un subtipo especial de objeto de SQL Server. Casi no hay necesidad de modificar ningún código a fin de pasar de SQL normal a SQLCipher.
SQLCipher depende de varios recursos nativos que están empaquetados en un archivo llamado sqlitecipher_native.zip. El tamaño del archivo es de 3MB.
La primera vez que el programa se ejecuta después de la instalación es necesario descomprimir el archivo descargado y copiar los recursos a la carpeta interna.
En los dispositivos más lentos la acción de copia puede llevar mucho tiempo.
Se recomienda inicializar el objeto con un código como éste:
B4X:
ProgressDialogShow("Inicializando base de datos...")
SQL1.Initialize(File.DirRootExternal, "1.db", True, DB_PASSWORD, File.DirRootExternal)
ProgressDialogHide
Preferentemente es mejor utilizar un dispositivo real en el desarrollo ya que el emulador es demasiado lento para manejar los recursos nativos.
La única diferencia entre la API SQL y la API SQLCipher es el método Initialize.
SQLCipher.Initialize espera dos valores adicionales: Password y NativeLibsFolder.
Password es la contraseña de la base de datos. Puedes pasarle una cadena de texto vacía si no hay contraseña. Ten en cuenta que no es posible cambiar la contraseña (o quitarla) de una una base de datos existente.
NativeLibsFolder es la carpeta donde se encuentra sqlitecipher_native.zip. Normalmente ese fichero se añadiría a la pestaña Files del editor y a la variable se le daría el valor de File.DirAssets. Otra opción es que, durante el desarrollo, a fin de hacer más rápido el proceso de instalación, lo copies manualmente a la tarjeta de almacenamiento y a la variable le des el valor de File.DirRootExternal (asegúrate en ese caso de quitarlo de la pestaña y borrarlo de la carpeta Files).
Cambios en el código requeridos para convertir de SQL a SQLCipher
- Declarar el objecto SQL como SQLCipher.
- Cambiar el código de inicialización a:
B4X:
ProgressDialogShow("Inicializando base de datos...")
SQL1.Initialize(File.DirRootExternal, "1.db", True, DB_PASSWORD, File.DirAssets)
ProgressDialogHide
Ten en cuenta que no hay necesidad de cambiar nada en el módulo DBUtils
La librería puede ser descargada de aquí:
http://www.b4x.com/android/files/SQLCipher.zip
Instrucciones de instalación:
- Descomprimir el archivo.
- Copiar todos los archivos de InternalLibrariesFolder a la carpeta de librerías internas.
- Añade sqlcipher_native.zip de la carpeta NativeResources a tu proyecto como se ha descrito previamente.
- Deberías hacer referencia tanto a SQL como a SQLCipher en tu proyecto.
Last edited: