Encriptación de contraseña de Android SQlite?
Así que tuve una idea para una aplicación de Android (sólo para aprender) ya que estoy empezando. Sería básicamente una aplicación que permite a su "almacén / bóveda" sus contraseñas que necesita recordar. Sin embargo, podría cifrar / descifrar a través de SQlite (que sería la mediana de almacenamiento). ¿Qué tipos de encriptación pueden hacer Android / SQlite3?
- SQLite insert No hay error de columna en android
- Android: sqlite: cursor: getColumnIndex
- Excepción SQLite: la base de datos está bloqueada
- Android: copia la base de datos de la carpeta de activos, pero sólo obtiene un archivo vacío
- Cómo almacenar un valor de tiempo en la base de datos SQLite en Android?
- Necesito un ejemplo de sqlite con Monodroid
- SQLite selecciona todos los registros de hoy y día anterior
- No se copia la base de datos de la carpeta de activos al dispositivo
- Android obtener la imagen de disco de base de datos es malformado (código 11) error
- No hay tal tabla android_metadata, ¿cuál es el problema?
- ¿Los campos de datos SQLite null ocupan más memoria?
- Por qué necesitamos onUpgrade (); Método en la clase SQLiteOpenHelper
- ¿Cómo puedo hacer un contexto de base de datos SQLite nulo en OnDestroy () en Android?
Probablemente desee utilizar el paquete javax.crypto de Android y almacenar los datos cifrados en las filas sqlite3.
Esto proporciona encriptación simétrica, permitiendo que su usuario ingrese una contraseña que desbloquearía el contenido de la base de datos cifrada con esa contraseña.
Utilizo apache commons Base64 para codificar la contraseña cifrada. Usted acaba almacenando la contraseña en el db como un Blob.
import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESKeySpec; import org.apache.commons.net.util.Base64; private static SecretKey key; try { byte[] secretBytes = "secret key".getBytes("UTF8"); DESKeySpec keySpec = new DESKeySpec(secretBytes); SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); key = keyFactory.generateSecret(keySpec); } catch (Exception e) { Log.e(Flashum.LOG_TAG, "DatabaseHelper " + e.toString()); } public byte[] encryptPassword(String userpw) { try { byte[] cleartext = userpw.getBytes("UTF8"); Cipher cipher = Cipher.getInstance("DES"); cipher.init(Cipher.ENCRYPT_MODE, key); byte[] clearBytes = cipher.doFinal(cleartext); byte[] encryptedPwd = Base64.encodeBase64(clearBytes); return encryptedPwd; } catch (Exception e) { Log.e(Flashum.LOG_TAG, "DatabaseHelper " + e.toString()); } return null; } public String decryptPassword(byte[] userpw) { String pw = ""; try { byte[] encrypedPwdBytes = Base64.decodeBase64(userpw); Cipher cipher = Cipher.getInstance("DES"); cipher.init(Cipher.DECRYPT_MODE, key); byte[] plainTextPwdBytes = cipher.doFinal(encrypedPwdBytes); pw = new String(plainTextPwdBytes, "UTF8"); } catch (Exception e) { Log.e(Flashum.LOG_TAG, "DatabaseHelper " + e.toString()); } return pw; }
- Cómo poner divisor en posición particular en una vista de lista de Android
- Android escribe en el archivo – no puede encontrar el archivo